質問

LINQ動的クエリを使用する方法をいくつか試しました-LINQKitおよび LINQ動的クエリライブラリ。コンパイル時にクエリをチェックできるようにするために、何らかの方法でLINQのアイデアを殺すため、私は2番目が好きではありません。そして、LINQKitでは、シナリオの良い例が見つかりませんでした。また、私は反射の過度の使用が好きではありません。

私のシナリオは次のとおりです。ビジネスロジックとDALロジックを実行しているWebサービスがあります。 Webformsアプリケーションは分離されています。ユーザーがフィルター処理する各フィールドのチェックボックスと、各フィルター値を入力するテキストボックスがあるページがあります。私のWebサービスにはGetByFilterメソッドがあり、そこでListを渡します。 QueryObjectは、ストリング:filedName、オブジェクト:fieldValueを持つクラスです。

次に、私のWebサービスはクエリオブジェクトのリストを受け取りますが、ここで大きな質問があります。フィールドカウントとフィルタ値が異なる場合、それをLINQクエリに変換する方法ですか?

さらに悪いこと-私はLINQ2SQLを使用していませんが、必要に応じてIQueryを返す可能性のあるリポジトリでカスタムDALを使用します(次のように: http://msdn.microsoft.com/en-us/magazine/dd569757。 aspx リポジトリまでスクロールします)。

LINQ2SQLでページングを使用できることはわかっています。 var PagedData = query.Skip((iPageNum-1)* iPageSize).Take(iPageSize);

では、どのようにして動的クエリパラメーター(およびiPageNumとiPageSize)をLINQから基礎となるDAL実装に取得して、それらのクエリをデータプロバイダー固有の方法で実行できますか? DALをLINQデータプロバイダーとして実装する必要があるかもしれません(どうすればいいのかわかりません)。

問題は-LINQ2SQLに依存したくありません(その場合、リポジトリをLINQ2SQLのラッパーとして実装することはできます)が、同時にDAL以外のすべての場所でLINQクエリ機能が必要になります。可能ですか?

役に立ちましたか?

解決

それは確かに可能です。あなたが探しているのは、独自のIQueryable、「カスタムLINQプロバイダー」を作成することです

MSDNの記事は次のとおりです。 http://msdn.microsoft.com/ en-us / library / bb546158.aspx マットウォーレンのブログシリーズ: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx

それから始めて、それがどれほど難しいか、そしてそれがあなたにとって価値があるかどうかを確認することをお勧めします!

これに反対する場合は、次のブログ投稿をお読みください: http:// www .hanselman.com / blog / RealWorldAppsInDaysNotWeeks.aspx ADO.Net Data Services(Astoria)が役に立つかどうかを確認します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top