0

如何将组加入与方法语法一起使用?

我可以使用如下查询语法进行组加入:

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;这可能吗?

4

1 回答 1

1

由于我对 CRM 的 Linq 做的不多,但它被转换为的 QueryExpressions 不支持返回整个实体,因此完全在黑暗中刺伤。尝试列出您想要返回的每一列,而不是实体本身。

于 2013-10-09T20:44:32.607 回答