2017-04-18 32 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的。

*:或,同義詞投票未決。