哪个 LINQ 将选择 FirstName.length < 6 的潜在客户?
此查询抛出“无效的 'where' 条件。实体成员正在调用无效的属性或方法”
var q = from a in serviceC.LeadSet where a.FirstName.Length < 6 select a;
哪个 LINQ 将选择 FirstName.length < 6 的潜在客户?
此查询抛出“无效的 'where' 条件。实体成员正在调用无效的属性或方法”
var q = from a in serviceC.LeadSet where a.FirstName.Length < 6 select a;
这不起作用的原因是所有 Linq to CRM 语句都转换为查询表达式,并且查询表达式不支持长度运算符。这为您提供了几个选择。
使用直接 SQL 查询来获取您需要的数据。这在大多数情况下都不太理想,因为您在 SDK 之外进行操作,并且如果您使用 CRM Online 则不可能
使用格兰特的答案来实际查看长度,不幸的是,它确实拉出了所有记录......
试试我刚刚提出的这个完全未经测试的想法:查询表达式确实有一个 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);
您可以使用ToList
将集合投影到对象,应该这样做。