2

LINQ-to-SQL クエリとして実行する必要がある TSQL クエリで COALESCE する列が多数ある場合。どうすれば効率的な 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)))))

実際には、「マージ」する合体内に数十の列があり、2つの異なる合体して2つの異なる合体した列を返すため、結果がかなり乱雑になる可能性があり、次のように処理されなかった場合、かなり非効率になるのではないかと心配しています。合体。

4

1 に答える 1

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# に移行しましたが、振り返っていません。

于 2012-09-27T23:44:23.973 に答える