asp.net - Nhibernate QueryOver 如何使该查询使用异步?

标签 asp.net asp.net-mvc asynchronous nhibernate queryover

对于这个新网站,我想在 NHibernate 中使用异步方法。我使用 QueryOver API 有一个简单的查询,但我无法让这个查询与异步一起使用。

这是一个简单的查询,其中包含一些列出所有企业的 where 子句。每次执行此操作时我都想要 20 个。

查询:

BusinessListItem bli = null;
BusinessCategory bc = null;
Category c = null;
BusinessImage bi = null;
Image i = null;

var q = Session.QueryOver<Business>()
            .JoinAlias(x => x.Categories, () => bc)
            .JoinAlias(() => bc.Category, () => c)
            .JoinAlias(x => x.Images, () => bi, JoinType.LeftOuterJoin)
            .JoinAlias(() => bi.Image, () => i, JoinType.LeftOuterJoin)
            .Where(() => bc.IsMain);

        if (!string.IsNullOrEmpty(_name))
            q.WhereRestrictionOn(x => x.Name).IsLike($"%{_name}%");

        if (!string.IsNullOrEmpty(_streetName))
            q.WhereRestrictionOn(x => x.StreetName).IsLike($"%{_streetName}%");

        if (_categoryId != null)
            q.Where(() => c.Id == _categoryId.Value);

        if (_subCategoryIds != null)
            q.WhereRestrictionOn(() => c.Id).IsIn(_subCategoryIds);

        return q.Select(
                Projections.Property<Business>(x => x.Id).WithAlias(() => bli.Id),
                Projections.Property<Business>(x => x.Name).WithAlias(() => bli.Name),
                Projections.Property("c.Name").WithAlias(() => bli.CategoryName),
                Projections.Property("bi.Image").WithAlias(() => bli.Image)
            )
            .TransformUsing(Transformers.AliasToBean<BusinessListItem>())
            .List<BusinessListItem>()
            .OrderBy(x => x.Name)
            .Skip(_skipCount)
            .Take(20)
            .ToList();

我知道方法 .ListAsync() 存在,但我无法让它与 Skip、Take 和 OrderBy 方法一起工作。

非常感谢任何帮助!

最佳答案

这个问题的答案是:

var result = await q.Select(
                Projections.Distinct(
                    Projections.Property<Business>(x => x.Id).WithAlias(() => bli.Id)
            )
            .TransformUsing(Transformers.AliasToBean<BusinessListItem>())
            .OrderBy(x => x.Name).Asc
            .Skip(_skipCount)
            .Take(_takeCount)
            .ListAsync<BusinessListItem>();

        return result.ToList();

感谢@DavidOsborne

关于asp.net - Nhibernate QueryOver 如何使该查询使用异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50076744/

相关文章:

Android 与 ASP.NET MVC4 的连接

asp.net-mvc - Telerik 控制与 ASP.NET MVC : Does this violate the MVC model?

javascript - 如何访问 async.parallel 的结果?

c++ - 使用异步调用与在线程中使用同步调用相同吗?

c# - 使用谷歌地图的地址验证器

ASP.NET 编译器提示 MiniProfiler 的框架版本不匹配

javascript - html5音频隐藏下载按钮

c# - 基于ASP.NET的MMOG的可行性

asp.net - 如何防止 ASP.Net Core Razor 中的 ViewData 内容编码?

ios - Swift 函数从异步 firebase 调用返回值