【问题标题】:NHibernate AsQueryable LINQ analogueNHibernate AsQueryable LINQ 模拟
【发布时间】:2017-04-18 19:03:46
【问题描述】:

我有旧代码要支持。 NHibernate 用于查询数据库。有 NHibernate LINQ 查询,如 IQueryOver.Where 等。它工作正常,但我想将这些查询用于本地序列。在 Microsoft LINQ 中有方法 Enumerable.AsQueryable。 NHibernate LINQ中是否有类似的东西?

所以我有这个。

    private IQueryOver<Package> GetPackages(GetPackageMessage message)
            {
                var query = SessionFactory.Current.QueryOver<Package>();

                if (message.TzapUtc.Use)
                {
                   query = query.Where(x => x.Tzap_utc >= message.TzapUtc.ValueBegin);

                }            
                if (message.Iik.Use)
                {
                    query = use ? query.Where(x => x.Iik == message.Iik.Value);
                }
}

我需要将所有这些 Where 应用到我的本地集合 IEnumerable

而不是从 DB 中收集。

【问题讨论】:

  • IQueryOver 公开了一个 NHibernate-IQueryable-like 结构,如果我记得的话。所以两者已经有些相似了。也就是说,对于大多数项目,您最好直接切换到实体框架而不是 linq-to-sql。
  • @DavidL, queryover 仅使用与 Linq 相同的 lambda,但没有别的。它们是不兼容的 API。有关更多详细信息,请参阅下面的答案。

标签: c# .net linq nhibernate linq-to-sql


【解决方案1】:

* 与 Linq 查询无关。它不涉及任何可查询的。因此,您不能对可查询对象应用任何 QueryOver 调用。 QueryOver 是 的强类型变体,使用 lambda 实现强类型。

如果您想在 NHibernate 中使用 Linq,请改用

using NHibernate.Linq;

...

var query = SessionFactory.Current.Query<Package>();

然后您可以使用 Linq Enumerable.AsQueryable 方法将您的 query 替换为从内存集合中获得的可查询对象。

*:或,同义词投票待定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2010-10-01
    • 2014-06-02
    • 2011-11-22
    • 1970-01-01
    相关资源
    最近更新 更多