1


0

LINQとSQL

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

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

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

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

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

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

問題は-LINQ2SQLに依存したくない(リポジトリをLINQ2SQLのラッパーとして実装するだけでよい)と同時に、DAL以外のすべての場所でLINQクエリ機能が必要なことです。 出来ますか?

1 Answer


0


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

MSDNの記事は次のとおりです。http://msdn.microsoft.com/en-us/library/bb546158.aspxおよびMatt Warrenのブログシリーズ: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)が役に立つかどうかを確認します