如何在LINQ-to-SQL查询中实现大型COALESCE

时间:2012-08-27 15:56:27

标签: .net vb.net linq tsql linq-to-sql

如果我在TSQL查询中有很多列COALESCE需要作为LINQ-to-SQL查询执行。如何将其转换为高效的LINQ-to-SQL查询?例如:

SELECT COALESCE(t1.Date, t2.DocDate, t3.PostingDate, t4.DocDate, t5.DocDate) DocDate
FROM t0
LEFT JOIN t1 ON t0.t1id = t1.id
LEFT JOIN t2 ON t0.t2id = t2.id
LEFT JOIN t3 ON t0.t3id = t3.id
LEFT JOIN t4 ON t0.t4id = t4.id
LEFT JOIN t5 ON t0.t5id = t5.id

有没有办法在LINQ查询中写出比以下更好的内容?

Dim result = ( _
   From c in context.t0 _
   Select DocDate=If(t0.t1.Date, If(t0.t2.DocDate, If(t0.t3.PostingDate, _
   If(t0.t4.DocDate, t0.t5.DocDate)))))

我实际上在合并中有几十列用于“合并”,并且两个不同的合并以返回两个不同的合并列,因此结果可能变得相当混乱,我担心如果它不是'它会非常低效作为COALESCE处理。

1 个答案:

答案 0 :(得分:1)

这不是一个确切的解决方案,但如果您可以切换到C#,您的代码看起来会更像:

result = From c in context.t0 
    Select DocDate = t0.t1.Date ?? t0.t2.DocDate ?? t0.t3.PostingDate ?? t0.t4.DocDate ?? t0.t5.DocDate;

几个月前我从VB跳到C#并没有回头。