C# LINQ中多个左连接的语法是否正确?

C# LINQ中多个左连接的语法是否正确?,c#,linq,entity-framework,join,left-join,C#,Linq,Entity Framework,Join,Left Join,我试图找出多个左连接的LINQ语法,但我得到了错误:名称“c”不在“equals”左侧的范围内。考虑在“相等”的两边交换表达式。< /代码> 我已经尝试过交换,如果我这样做,它会使'c'和'd'都出现“不在范围内”错误 我在第三条join语句中对c.field2等于d.field2使用的原因是我的表的结构如下: tableA: field1 tableB: field1 tableC: field1 field2 tableD: field2 也就是

我试图找出多个左连接的
LINQ
语法,但我得到了错误:
名称“c”不在“equals”左侧的范围内。考虑在“相等”的两边交换表达式。< /代码> 

我已经尝试过交换,如果我这样做,它会使'c'和'd'都出现“不在范围内”错误

我在第三条join语句中对c.field2等于d.field2使用
的原因是我的表的结构如下:

tableA:   field1
tableB:   field1
tableC:   field1    field2
tableD:             field2
也就是说,将表格与其余数据关联起来的唯一方法是使用
field2


有人能纠正我的语法吗?或者,根据我的表格设置,是否有某种方法必须这样做?

我使用这种语法:

var results = (from a in db.tableA
  from b in db.tableB.Where(s => s.field1 == a.field1)
  from c in db.tableC.Where(s => s.field1 == a.field1).DefaultIfEmpty()
  from d in db.tableD.Where(s => s.field2 == c.field2).DefaultIfEmpty()
  select new CombinedObject() { });
它似乎在多个表上运行良好。我想我的Field1和Field2与您的示例相符:)

[编辑]

根据注释,如果您想添加一些额外的过滤,只需在适当的位置将其添加到
where()
中即可。例如:

  from c in db.tableC.Where(s => s.field1 == a.field1 && s.field3 == someVariable).DefaultIfEmpty()

类似于:)

在哪里可以搜索field1的特定值?例如,我试图搜索
,其中a.field1==值imSearching For
。我能把它放在
select
语句之前吗?将它添加到相应的
.Where()
中。我在这个例子中提到的代码就是:)我将在我的答案的第二个场景中进行编辑。它起作用了,lambda表达式使它更加清晰。谢谢
  from c in db.tableC.Where(s => s.field1 == a.field1 && s.field3 == someVariable).DefaultIfEmpty()