Linqを使って動的にフィルタを作成するパターンはありますか?Linqを使って動的にフィルタを作成するパターンはありますか?
リストのカスタムフィルタリングを作成する必要がありますが、これまではSQLを動的に作成していましたが、これはLinqで可能です。
Linqを使って動的にフィルタを作成するパターンはありますか?Linqを使って動的にフィルタを作成するパターンはありますか?
リストのカスタムフィルタリングを作成する必要がありますが、これまではSQLを動的に作成していましたが、これはLinqで可能です。
ScottGuさんのブログからDynamic Linq Libraryをチェックアウト:以下、例えば
は、Northwindデータベースからデータを取得し、ASP.NETのGridViewコントロールでそれを表示するSQL VBクエリに標準タイプセーフなLINQです:
私が代わりにそうDim Northwind As New NorthwindDataContext
Dim query = Northwind.Products .where("CategoryID=2 And UnitPrice>3") . OrderBy("SupplierId")
Gridview1.DataSource = query
GridView1.DataBind()
お知らせのような上記のクエリ式を再書き込み可能性がLINQ DynamicQueryライブラリを使用して
Dim Northwind As New NorthwindDataContext
Dim query = From q In Northwind.Products Where p.CategoryID = 2 And p.UnitPrice > 3 Order By p.SupplierID Select p
Gridview1.DataSource = query
GridView1.DataBind()
方法conditional-where節とsort-orderby節はコード式の代わりに文字列式をとるようになりました。遅延バインドされた文字列なので、動的に構築できます。たとえば、アプリケーションを使用してエンドユーザーのビジネスアナリストにUIを提供し、独自の条件文を含むクエリを独自に構築することができます。
このようなものはありますか?
SELECT * FROM Items [t0] where Name IN ('a','b','c')
興味深いコンセプトですが、ちょっと混乱します – ppumkin
ダイナミックLINQのようなSQL文を作成します
var myList = new List<string> { "a","b","c" };
var items = from item in db.Items
where myList.Contains(item.Name)
select item;
は行くための一つの方法です。
ご使用のシナリオでは過剰な可能性があります。検討:
IQueryable<Customer> query = db.Customers;
if (searchingByName)
{
query = query.Where(c => c.Name.StartsWith(someletters));
}
if (searchingById)
{
query = query.Where(c => c.Id == Id);
}
if (searchingByDonuts)
{
query = query.Where(c => c.Donuts.Any(d => !d.IsEaten));
}
query = query.OrderBy(c => c.Name);
List<Customer> = query.Take(10).ToList();
これは機能しますか?エラーこれらの引数でアクセス可能な「OrderBy」を呼び出せないため、オーバーロードの解決に失敗しました。 型パラメータのデータ型はこれらの引数から推論できません。明示的にデータ型を指定すると、このエラーが修正される可能性があります。 .OrderBy句のパラメータオプションとして 'String'が表示されません。 – JohnnyBizzle
@JohnnyBizzle - それは動作します。私は多くのプロジェクトでそれを使用しています。 dynamic.csがプロジェクト内にあり、使用する宣言で適切に参照されていることを再度確認します。 – Geoff
それは素晴らしいです。私はあなたがそれを行うことができることを知らなかった。それは高度な検索クエリの構築で私の問題を解決します。ニースワン+1 – ppumkin