2012-01-16 14 views
7

new_contextlineという文字列属性を持つnew_trexmailというエンティティがあります。SQL IN句に相当します。

私は、new_contextlineが定義されたリストにあるエンティティのリストを取得しようとしています。次のコードは、エラーで失敗し

NotSupportedException: Invalid 'where' condition. An entity member is invoking an invalid property or method.

string[] test = new[]{"aaa", "hhh"}; 

var query = from n in New_trexmailSet 
      where test.Contains(n.New_contextline) 
      select n; 

このエラーがスローされている理由私は理解しますが、それはXRMを使用してIN句のequiavalentを行うことは可能だ場合、私は思ったんだけど。

可能であれば、XRMを実行してSELECT * FROM new_trexmail WHERE new_contextline in ('aaa', 'hhh')を実行する方法はありますか?

おかげで、

デビッド

答えて

5

list of LINQ limitations(必要以上に長い)をチェックし、where句に特に制限:

句の左側には、属性名でなければなりません句の右側の は値でなければなりません。左側を 定数に設定することはできません。句の両辺は定数ではありません。 文字列関数Contains、StartsWith、EndsWith、およびEqualsをサポートしています。

testはCRM属性ではないため、Containsを呼び出すことはできません。しかし、これを回避する一つの方法は、ScottGuによって開発され、以下に示すように「Dynamic Linq」を使用することです:仕事をしていません

//must include the below using statements 
//using System.Linq; 
//using System.Linq.Dynamic; 

var trexmailSet = New_trexmailSet; 

string[] test = new[] { "aaa", "hhh" }; 

string whereClause = ""; 

foreach (string name in test) 
{ 
    whereClause += string.Format("new_contextline = \"{0}\" OR ", name); 
} 

trexmailSet = trexmailSet.Where(whereClause.Substring(0, whereClause.Length - 4)); 

var query = from n in trexmailSet 
      select n; 
+0

!私はそのライブラリを認識していない、それはかなり便利に見えます。どうもありがとう。 – dlarkin77