LINQ选择Leads,其中FirstName.length< 6

时间:2013-03-05 15:27:57

标签: linq dynamics-crm-2011

哪个LINQ将选择Leads,其中FirstName.length< 6?

此查询将抛出“无效”,其中'条件。实体成员正在调用无效的属性或方法“

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

2 个答案:

答案 0 :(得分:4)

这不起作用的原因是所有Linq to CRM语句都转换为查询表达式,而Query Expression不支持长度运算符。这给你留下了几个选择。

  1. 使用直接SQL查询来获取所需的数据。这在大多数情况下都不太理想,因为您在SDK之外操作,如果您使用的是CRM Online,则不可能

  2. 使用格兰特的答案来实际查看长度,不幸的是,它会拉出所有记录......

  3. 尝试这个我刚刚提出的完全未经测试的想法:查询表达式确实具有GreaterEqual条件,因此您应该能够将它与6个单引号的字符串进行比较(因为单引号是排序时的第一个字符)理论上,这应该有效:

  4. 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);
    

答案 1 :(得分:1)

您可以使用ToList将集合投影到对象,应该这样做。