0

に次のエンティティがありますEntity Framwork 5 (C#)

OrderLine - Id, OrderId, ProductName, Price, Deleted

Order - Id, CustomerId, OrderNo, Date

Customer - Id, CustomerName

注文検索画面で、ユーザーは次の検索値を入力できます。

ProductName, OrderNo, CustomerName

たとえば、次のように入力します。

Product Search Field: 'Car van bike'

Order Search Field: '100 101 102'

Customer Search Field: 'Joe Jack James'

これは、入力された単語ごとに OR 検索 (理想的にはエンティティへの linq を使用) を実行する必要があります。この例では、次の where sql が出力されます。

(ProductName like 'Car' Or ProductName like 'van' Or ProductName like 'bike') AND

(OrderNo like '100' Or OrderNo like '101' Or OrderNo like '102') AND

(CustomerName like 'Joe' Or CustomerName like 'Jack' Or CustomerName like 'James')

エンティティへのlinqを使用してこれを行いたいのですが、ユーザーが各フィールドに入力する単語の数がわからないため、これはある種の動的ラムダビルダーである必要があると推測しています。

これを行うにはどうすればよいですか。簡単にブラウズしましたが、簡単なものは何も表示されません。

4

4 に答える 4

0

Expression Treesを使用してラムダ式を作成できます。必要なのは、値を分割して式を作成することです。次に、次のようなラムダ式に変換できます。

var lambda = Expression.Lambda<Func<object>>(expression);  

ここに例があります

于 2013-07-31T09:01:53.597 に答える
0

免責事項: 私は Entity REST SDK の作成者です。


http://entityrestsdk.codeplex.comで Entity REST SDK を確認できます。

以下に示すように、JSON 構文を使用してクエリを実行できます。

 /app/entity/account/query?query={AccountID:2}&orderBy=AccountName
     &fields={AccountID:'',AcccountName:''}

提供されている特定の拡張機能を使用して、JSON をラムダに変換できます。

JSON を Linq に変換する方法の詳細は次のとおりです。http://entityrestsdk.codeplex.com/wikipage?title=JSON%20Query%20Language&referringTitle=ホーム

OData v3 の現在の制限事項

さらに、この JSON ベースのクエリは OData と同じではなく、OData はナビゲーション プロパティを使用した正しい検索方法をまだサポートしていません。OData を使用すると、たとえば、選択したエンティティ内のナビゲーション プロパティを検索できますCustomer(1)/Addresses?filter=..

ただし、ここでは、以下に示すように、Any プロパティと Parent プロパティの比較の両方をサポートしています。

例、特定の商品を購入した顧客のリストを検索する場合、次のクエリになります。

 { 'Orders:Any': { 'Product.ProductID:==': 2 } }

これはに翻訳されます

  Customers.Where( x=> x.Orders.Any( y=> y.Product.ProductID == 2))

現在、この OData を実行する方法はありません。

JSON の利点

JavaScript フレームワークを使用している場合、英語の構文に基づいてクエリを作成することは少し難しく、クエリを作成することは困難です。ただし、次の方法は、示されているようにクエリを簡単に作成するのに役立ちます。

function query(name,phone,email){
   var q = {};
   if(name){
       q["Name:StartsWith"] = name;
   }
   if(phone){
       q["Phone:=="] = phone;
   }
   if(email){
       q["Email:=="] = email;
   }
   return JSON.stringify(q);
}

上記のメソッドはクエリを構成し、指定されている場合はすべてを「AND」します。構成可能なクエリを作成することは、JSON ベースのクエリ構文で大きな利点となります。

于 2013-07-31T08:42:17.633 に答える