2

哪个 LINQ 将选择 FirstName.length < 6 的潜在客户?

此查询抛出“无效的 '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 不会接受该表达式,即使 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 回答