2017-04-18 7 views
0

私は古いコードをサポートしています。 NHibernateは、DBのクエリに使用されます。 IQueryOver.WhereなどのNHibernate LINQクエリがあります。それは正常に動作しますが、私はローカルシーケンスのこれらのクエリを使用したいと思います。 Microsoft LINQには、方法Enumerable.AsQueryableがあります。 NHibernate LINQにアナログがありますか?NHibernate AsQueryable LINQアナログ

だから私はこれを持っています。私はどこに私の地元のコレクションIEnumerableを<パッケージにこれらすべてを適用する必要があり

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); 
       } 
} 

>ではなく、コレクションの

はDBからです。

+0

IQueryOverは、思い出した場合、NHibernate -IQueryableのような構造を公開します。したがって、2つはすでにやや類似しています。つまり、大部分のプロジェクトではlinq-to-sqlを使用してEntity Frameworkに直接切り替える方がよいでしょう。 –

+0

@DavidL、[tag:queryover]はLinqと共通のlambdaしか使用しませんが、他には何もありません。それらは互換性のないAPIです。もう少し詳しくは私の答えを見てください。 –

答えて

1

*はLinqクエリとは関係ありません。クエリ可能なものは含まれません。したがって、QueryOverコールをクエリ可能に適用することはできません。 QueryOverは強タイピングを達成するためにラムダを使用して、の強く型が変わる変形です。

NHibernateでLinqを使用する場合は、代わりにを使用してください。

using NHibernate.Linq; 

... 

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

次に、あなたのLINQ Enumerable.AsQueryable方法を使用して、メモリのコレクション内から取得した照会可能で、あなたのqueryを置換することができるだろう。

*:または、同義語vote pending。

関連する問題