4

首先,我很抱歉,因为这是我第二次写这个问题,但之前解释不好,现在已经接近了。

我正在为 CRM 数据库的搜索页面进行 linq 查询,并且像下面这样的普通查询不起作用,我遇到了异常:

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

对于连接查询,在 Where 是 r.Name == "Me" && j.LastName == "He" 这样的子句中,我必须使用两个 Where 子句进行查询,因为我得到了与上面相同的异常,说表 'r' 没有 'LastName' 属性。

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)

在这种情况下,我该怎么做这个查询。提前致谢!

4

2 回答 2

5

我想评论一下我学到的东西以及我发现的问题的解决方案,希望能对某人有所帮助。CRM LINQ 中存在一些限制,如此处所述

我发现的第一个实体引用是这样的:

CrmEntityReference Caller
{
   Guid ID;
   string name;    
}

我可以选择 Caller.name 但我不能在 where 子句中有 Caller.name。解决方案 -> 加入表格

第二个限制,当我们在查询中有连接时,如果它们是 AND 谓词,我们可以在 where 中有不同的表,我们必须编写两个子句 where 像这样:

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

但是当我们需要使用 OR 谓词而不是 AND 时,问题就来了,我们唯一的解决方案是执行两个查询,然后对这些查询进行联合。

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

于 2012-11-30T12:02:03.777 回答
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)
于 2012-11-28T16:06:51.253 回答