具有连接的CRM LINQ查询中的异常。第二个表中的属性不存在

时间:2012-11-28 15:49:37

标签: c# linq dynamics-crm-2011 dynamics-crm crm

首先,我很抱歉,因为这是我第二次写这个问题,但之前的解释很糟糕,现在很接近。

我正在为CRM数据库的搜索页面执行linq查询,并且如下所示wrtiting正常查询不起作用,我得到例外:

 [System.ServiceModel.FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>] = {"'Contact' entity doesn't contain attribute with Name = 'title'."}

对于连接查询,在子句中的那个是r.Name ==“Me”&amp;&amp; j.LastName ==“他”我必须用两个Where子句进行查询,因为我得到了与上面相同的异常,说表'r'没有'LastName'attributte。

var cms = from i in aux_pr
       join cal in Contact on i.aux_CallerRequestorID.Id equals cal.ContactId.Value
       join sub in Subject on i.aux_ClassificationID.Id equals sub.SubjectId
       where cal.FullName.Contains(searchTerm) ||
       sub.Title.Contains(searchTerm)

在这种情况下,我该如何进行此查询。提前谢谢!

2 个答案:

答案 0 :(得分:5)

我想评论我学到了什么以及我找到的解决方案,我希望能帮到某个人。 CRM LINQ存在一些限制,如here

所述

我找到的第一个,有这样的实体引用:

CrmEntityReference Caller
{
   Guid ID;
   string name;    
}

我可以选择Caller.name,但我不能在where子句中使用Caller.name。解决方案 - &gt;加入表格

第二个限制是,当我们在查询中加入时,如果它们是AND谓词,我们可以在其中有不同的表,我们必须写两个子句,如下所示:

   where cal.FullName.Contains(searchTerm)
   where sub.Title.Contains(searchTerm)

但是当问题出现时,我们需要使用OR谓词而不是AND,我们唯一的解决方案就是做两个查询并在完成这些查询之后。

我有四个查询可以只使用一个调用,现在处于开发阶段,由于记录的数量,性能很好,但我们会在测试阶段看到这是如何工作的。

答案 1 :(得分:0)

尝试创建两个不同的过滤器..

   var cms = from i in aux_pr
   join cal in Contact on i.aux_CallerRequestorID.Id equals cal.ContactId.Value
   join sub in Subject on i.aux_ClassificationID.Id equals sub.SubjectId
   where cal.FullName.Contains(searchTerm) ||
   where sub.Title.Contains(searchTerm)