2

FirstName.length < 6 のリードを選択する LINQ はどれですか?

このクエリは、「無効な 'where' 条件。エンティティ メンバーが無効なプロパティまたはメソッドを呼び出しています」をスローします。

var q = from a in serviceC.LeadSet where a.FirstName.Length < 6 select a;
4

2 に答える 2

4

これが機能しない理由は、すべての Linq to CRM ステートメントがクエリ式に変換され、クエリ式が長さ演算子をサポートしていないためです。これにより、いくつかのオプションが残ります。

  1. 直接 SQL クエリを使用して、必要なデータを取得します。SDK の外部で操作しているため、これはほとんどの状況では望ましくありません。また、CRM Online を使用している場合は不可能です。

  2. グラントの回答を使用して、実際に長さを確認します。残念ながら、すべてのレコードをプルします...

  3. 私が思いついたこの完全にテストされていないアイデアを試してください: クエリ式には GreaterEqual 条件があるため、それを 6 つの単一引用符の文字列と比較できるはずです (単一引用符はデフォルトでソートされたときに最初の文字であるため、理論的には、これは動作するはずです:

var q = from a in serviceC.LeadSet where a.FirstName <= "''''''" select a;

編集

テストを実行した後、Linq はその Expression を受け入れないことに気付きました。SQL は受け入れますが。したがって、答えは実際のクエリ式を作成することです。

QueryExpression qe = new QueryExpression("lead");
qe.Criteria.AddCondition("firstname", ConditionOperator.LessEqual, "''''''");

var entities = service.RetrieveMultiple(qe);
于 2013-03-05T16:18:29.700 に答える
1

ToListコレクションをオブジェクトに投影するために使用できます。

于 2013-03-05T15:34:26.067 に答える