Linq を使用して動的にフィルターを作成するパターンはありますか?
リストにカスタム フィルタリングを作成する必要があります。以前は動的に SQL を作成していましたが、Linq ではこれが可能ではないようです。
Linq を使用して動的にフィルターを作成するパターンはありますか?
リストにカスタム フィルタリングを作成する必要があります。以前は動的に SQL を作成していましたが、Linq ではこれが可能ではないようです。
ScottGu のブログからダイナミック Linq ライブラリをチェックしてください。
たとえば、以下は、Northwind データベースからデータを取得し、ASP.NET GridView コントロールに表示する、標準のタイプ セーフな LINQ to SQL VB クエリです。
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()
LINQ DynamicQuery ライブラリを使用すると、上記のクエリ式を次のように書き直すことができます。
Dim Northwind As New NorthwindDataContext
Dim query = Northwind.Products .where("CategoryID=2 And UnitPrice>3") . OrderBy("SupplierId")
Gridview1.DataSource = query
GridView1.DataBind()
conditional-where 句と sort-orderby 句が、コード式ではなく文字列式を使用するようになったことに注目してください。これらは遅延バインド文字列であるため、動的に構築できます。たとえば、アプリケーションを使用して、エンドユーザーのビジネス アナリストに UI を提供し、エンド ユーザーが独自にクエリを作成できるようにすることができます (任意の条件句を含む)。
Dynamic Linq はその 1 つの方法です。
あなたのシナリオではやり過ぎかもしれません。検討:
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();
このようなもの?
var myList = new List<string> { "a","b","c" };
var items = from item in db.Items
where myList.Contains(item.Name)
select item;
次のようなSQLステートメントを作成します
SELECT * FROM Items [t0] where Name IN ('a','b','c')