具有集合和EF4的多个左外部联接

时间:2011-09-20 15:27:30

标签: linq entity-framework

我有一个使用EF4的Linq声明

var q = from a in FunctionA
        from b in FunctionB.Where(a=>a.Id== b.Id).DefaultIfEmpty()
        from c in FunctionC.Where(c=>c.Id== b.Id).DefaultIfEmpty()
        select a;

其中FunctionA,FunctionB和FunctionC返回集合。

对于某些数据条件,我得到一个null异常,因为“fromB in FunctionB.Where(a => a.Id == b.Id).DefaultIfEmpty()”中的b值有时为null然后语句“来自FunctionC.Where中的c(c => c.Id == b.Id).DefaultIfEmpty()”因为b为空而爆炸。

在这里进行外部联接的正确方法是什么?请帮忙!

谢谢!

1 个答案:

答案 0 :(得分:0)

您的Where语法看起来不正确,我认为您实际上正在使用linq-to-objects,但您需要做的就是添加一个条件来检查其中b不为空

编辑 - 根据您的评论,您想要这样做

  var q = from a in FunctionA
          from b in FunctionB.Where(x => a.Id == x.Id).DefaultIfEmpty()
          from c in FunctionC.Where(x => b != null && b.Id== x.Id).DefaultIfEmpty()
          select a;