【问题标题】:Outer join with Linq causing "GroupJoin" error与 Linq 的外部联接导致“GroupJoin”错误
【发布时间】:2013-12-18 15:42:18
【问题描述】:

以下连接投影抛出错误,“‘GroupJoin’操作必须后跟一个‘SelectMany’操作,其中集合选择器正在调用‘DefaultIfEmpty’方法。” 我已经经历了一些变化的排列,但无法弄清楚。想法?

编辑:看起来越来越像这样可能是 Dynamics CRM 问题。我为数据访问的 Xrm 模型是由 CRM SDK (CRM 2011) 生成的。

var q =
   left
     .GroupJoin(right, 
                c => c.Id, 
                cl => cl.c.Id, 
                (c, cs) => new { c, cs })
     .Where(x=>x.c.Name.Contains("some text"))
     .SelectMany(x => x.cs.DefaultIfEmpty(), (x, csubl) =>
        new
        {
            CompanyName = x.c.Name
        });

【问题讨论】:

  • 刚刚使用 EF 和 Linq to Objects 进行了验证 - 可以正常工作。这绝对是动态 CRM 的问题
  • 是的。我已经想通了。对我来说是的。 :(

标签: linq dynamics-crm-2011 left-join outer-join xrm


【解决方案1】:

我认为查询语法会更漂亮

var q = from l in left
        join r in right on l.Id equals r.c.Id into groupped
        from g in groupped.DefaultIfEmpty()
        where l.Name.Contains("some text")
        select new { 
            CompanyName = l.Name; 
        }

更新
在来自msdn 的示例中,有带有左连接的示例,因此您可以尝试上面的代码,或者将Where 移动到GroupJoin 之前或SelectMany 之后

【讨论】:

    猜你喜欢
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多