質問

new_Contextlineという文字列属性を備えたnew_Trexmailというエンティティがあります。

定義されたリストでnew_contextlineisがあるエンティティのリストを取得しようとしています。

次のコードはエラーで失敗します: 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句の等航海を行うことができるかどうか疑問に思っています。

可能であれば、XRMを実行するにはどうすればよいですか SELECT * FROM new_trexmail WHERE new_contextline in ('aaa', 'hhh')?

ありがとう、

デビッド

役に立ちましたか?

解決

(望ましいよりも長い)をチェックしてください LINQ制限のリスト, 、特にの制限 where 句:

句の左側は属性名でなければならず、句の右側は値でなければなりません。左側を定数に設定することはできません。句の両側は定数にすることはできません。文字列関数が含まれ、Startswith、Endswith、および等しい文字列関数をサポートします。

それ以来 test CRM属性ではなく、電話することはできません Contains その上。しかし、これを回避する1つの方法は、使用することです。動的linq「Scottguによって開発されたように、以下に示すように:

//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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top