2017-04-18 34 views
0

我有旧代码支持。 NHibernate用于查询数据库。有像IQueryOver.Where等NHibernate LINQ查询。它工作正常,但我想使用这些查询本地序列。在Microsoft LINQ中有方法Enumerable.AsQueryable。 NHibernate LINQ中有没有类似的东西?NHibernate AsQueryable 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); 
       } 
} 

我需要应用所有这些在哪里我的本地收藏的IEnumerable <包>

,而不是收集从数据库得到。

+0

如果我记得,IQueryOver公开了一个NHibernate-'IQueryable'结构。所以这两者已经有点类似了。也就是说,对于大多数项目,您可能更适合通过linq-to-sql直接切换到实体框架。 –

+0

@DavidL,[tag:queryover]只使用与Linq共同使用的lambda,但没有别的。它们是不兼容的API。有关更多详细信息,请参阅下面的答案。 –

回答

1

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

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

using NHibernate.Linq; 

... 

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

然后你就可以用LINQ Enumerable.AsQueryable方法在内存中集合从获得可查询的代你query的。

*:或,同义词投票未决。