2008-08-27 4 views

答えて

19

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を提供し、独自の条件文を含むクエリを独自に構築することができます。

+0

これは機能しますか?エラーこれらの引数でアクセス可能な「OrderBy」を呼び出せないため、オーバーロードの解決に失敗しました。 型パラメータのデータ型はこれらの引数から推論できません。明示的にデータ型を指定すると、このエラーが修正される可能性があります。 .OrderBy句のパラメータオプションとして 'String'が表示されません。 – JohnnyBizzle

+0

@JohnnyBizzle - それは動作します。私は多くのプロジェクトでそれを使用しています。 dynamic.csがプロジェクト内にあり、使用する宣言で適切に参照されていることを再度確認します。 – Geoff

+0

それは素晴らしいです。私はあなたがそれを行うことができることを知らなかった。それは高度な検索クエリの構築で私の問題を解決します。ニースワン+1 – ppumkin

2

このようなものはありますか?

SELECT * FROM Items [t0] where Name IN ('a','b','c') 
+1

興味深いコンセプトですが、ちょっと混乱します – ppumkin

9

ダイナミック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(); 
関連する問題