gpt4 book ai didi

c# - LINQ 中多个左连接的正确语法?

转载 作者:太空狗 更新时间:2023-10-30 00:31:36 30 4
gpt4 key购买 nike

我正在尝试找出多个左连接的 LINQ 语法,但出现错误:名称“c”不在“等于”左侧的范围内'.考虑交换“等于”两边的表达式。

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

            var result = 
from a in db.tableA

join b in db.tableB //first join (inner join)
on a.field1 equals b.field1

join c in db.tableC //second join (left join)
on a.field1 equals c.field1
into left_one

join d in db.tableD //third join (left join)
on c.field2 equals d.field2
// ^ here
into left_two


where a.field1 == theValueImSearchingFor


from c in left_one.DefaultIfEmpty()
from d in left_two.DefaultIfEmpty()

select new CombinedObject()
{
...
}

我在第三个连接语句中使用 on c.field2 equals d.field2 的原因是我的表结构如下:

tableA:   field1
tableB: field1
tableC: field1 field2
tableD: field2

也就是说,将 tableD 与其余数据相关联的唯一方法是使用 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() { });

它似乎适用于多个表。我想我的 field1s 和 field2s 与你的例子相匹配:)

[编辑]

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

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

类似的:)

关于c# - LINQ 中多个左连接的正确语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24499190/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com