Dynamics CRM 2011 Linq Group加入方法语法

时间:2013-10-09 17:00:30

标签: linq dynamics-crm-2011

如何使用方法语法进行组连接?

我可以使用这样的查询语法进行组连接:

var contAndAcc = from contact in linq.ContactSet
                    join account in linq.AccountSet
                    on contact.ParentCustomerId.Id equals account.AccountId
                    into accountGroup
                    from account in accountGroup.DefaultIfEmpty()
                    select new{contact = contact, account = account};


编译器将查询语法转换为方法语法,因此必须可以在方法语法中编写上述内容。
这些不起作用:

var contAndAcc = linq.ContactSet.GroupJoin(
    linq.AccountSet, // collection to join to
    contact => contact.ParentCustomerId.Id,
    account => account.AccountId, 
    (contact, account) => contact); 

var contAndAcc = linq.ContactSet.GroupJoin(
    linq.AccountSet,
    contact => contact.ParentCustomerId.Id,
    account => account.AccountId,
    (contact, account) => contact)
    .DefaultIfEmpty()
    .Select(contact=>contact);

var contAndAcc = linq.ContactSet.GroupJoin(
    linq.AccountSet,
    contact => contact.ParentCustomerId.Id,
    account => account.AccountId,
    (contact, account) => contact)
    .DefaultIfEmpty()
    .SelectMany((contact) => contact);

无论我尝试什么,我都会得到这样的信息:
'GroupJoin'操作必须后跟'SelectMany' 集合选择器调用'DefaultIfEmpty'方法的操作。

我还想使用IEqualityComparer;那有可能吗?

1 个答案:

答案 0 :(得分:1)

黑暗中的总刺,因为我没有做很多Linq到CRM,但是它被转换为不支持返回整个实体的QueryExpressions。尝试列出要返回的每个列,而不是实体本身。