gpt4 book ai didi

c# - LINQ 中的条件连接

转载 作者:太空狗 更新时间:2023-10-29 23:11:47 43 4
gpt4 key购买 nike

我有父子表关系。在下面的示例中,Foo 有一个 FooID 和一个指向父记录的可为空的 ParentFooID。

Bar 表始终链接到父记录。这是我用来获取结果的 SQL。

Select * from Foo f
JOIN Bar b
ON b.FooID =
CASE
WHEN f.ParentFooID is null
THEN f.FooID
ELSE f.ParentFooID
END

我在将其放入 LINQ 查询时遇到了一些麻烦。我想避免像下面这样的交叉连接:

    var q = from f in Foo 
from b in Bar
where b.FooID == (f.ParentFooID ?? f.FooID)

干杯,

丹尼尔

最佳答案

您的具体示例是使用 CASE 回退到非空值,这实际上只是一个 COALESCE。在这种情况下,这有效:

var q = from f in dc.Foos
join
b in dc.Bars
on
(f.ParentFooID ?? f.FooID)
equals
b.FooID
into grouped
select grouped;

转化为:

SELECT ...
FROM [dbo].[Foo] AS [t0]
LEFT OUTER JOIN [dbo].[Bar] AS [t1]
ON (COALESCE([t0].[ParentFooID],[t0].[FooID])) = [t1].[FooID]
ORDER BY [t0].[FooID], [t1].[BarID]

关键是 COALESCE(case1, case2) 上的左外连接,因此表达式转换器似乎确实理解这一点。

关于c# - LINQ 中的条件连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1452875/

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