首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有多个内联接和单个WHERE子句的CRM 2011 LINQ查询(VB .NET)

具有多个内联接和单个WHERE子句的CRM 2011 LINQ查询(VB .NET)
EN

Stack Overflow用户
提问于 2011-09-01 23:48:05
回答 1查看 5.1K关注 0票数 1

我在尝试使用CRM 2011进行LINQ查询时遇到了很大的困难。每当我有三个或更多的连接表(似乎与哪个CRM表无关),并且我尝试添加WHERE子句(与我正在过滤的表无关)时,问题就会出现。如果删除WHERE子句,查询就可以正常运行,并且可以遍历结果集。我也可以保留WHERE子句,但删除第三个连接,它也可以工作。我已经对许多CRM实体进行了尝试,并得到了相同的错误:“'Join‘操作的结果选择器必须返回两个属性的匿名类型。”似乎有一个限制,如果我想使用一个WHERE子句,我只能连接两个表。

在发出LINQ查询时,我使用了早期绑定CRM上下文生成的代码方法。这是从CRM SDK示例中提取的代码,只是我添加了WHERE子句。我在任何地方都找不到一个这样做的例子。

代码语言:javascript
运行
复制
Dim MyVar = From a In svcContext.AccountSet _
Join c In svcContext.ContactSet On a.PrimaryContactId.Id Equals c.ContactId _
Join l In svcContext.LeadSet On a.OriginatingLeadId.Id Equals l.LeadId _
Where a.Name.Contains("c") _
Select New With {c.FullName}

For Each MyItem In MyVar
   Debug.Print(MyItem.FullName)
Next

感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2011-09-02 01:40:43

我没有设置CRM来测试这是否只是他们的供应商的限制,但你可以尝试以下方法:

代码语言:javascript
运行
复制
Dim MyVar = From a In svcContext.AccountSet _
    Where a.Name.Contains("c") _
    Join c In svcContext.ContactSet On a.PrimaryContactId.Id Equals c.ContactId _ 
    Join l In svcContext.LeadSet On a.OriginatingLeadId.Id Equals l.LeadId _ 
    Select c.FullName

几点意见:与TSQL不同,LINQ中的操作顺序更加灵活。这样,您就可以在执行联接之前限制第一个表(这取决于CRM提供程序如何翻译)。

其次,您想知道名称中"c“的位置,还是只想知道开头?如果在一开始,考虑Where a.Name.StartsWith("c")的另一个注释,在你的Select投影中,你是不必要地投影到一个可枚举的类中。如果您只是投射单个值,则不需要额外的类开销。然后在foreach中,只执行Debug.Print( MyItem ),因为MyItem是全名。同样在VB中,当使用查询语法时,您不需要New With {...}。如果您想要投影一个包含多列的匿名类型,您可以在VB中执行以下操作,就像在SQL中一样:

代码语言:javascript
运行
复制
Dim query = From c In Customers
            Select C.FullName, C.CompanyName
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7272891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档