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()