использование дела в linq - PullRequest
2 голосов
/ 21 сентября 2009

Как это можно написать в linq

select * from transactions T

JOIN  TransactionSample ts

ON ts.TransactionID =  

 CASE 

   WHEN T.ParentTransactionID is null

     THEN T.TransactionID

   ELSE T.ParentTransactionID

 END

where T.TransactionID = 227511

Ответы [ 3 ]

3 голосов
/ 21 сентября 2009

Случай в основном просто условный.

... где (ts => ts.TransactionID == (T.ParentTransactionID ?? T.TransactionID)) ...

1 голос
/ 21 сентября 2009

Это будет записано в LINQ как:

using(var dc = new MyDataContext())
{
    var q = from t in Transactions
        join ts in TransactionSamples
        on (t.ParentTransactionID ?? t.TransactionID)
        equals ts.TransactionID
        into joined
        where t.TransactionID = 12345
        select joined;
}

В вашем примере вы используете CASE для возврата к ненулевому значению, которое на самом деле совпадает с COALESCE(case1, case2):

SELECT ...
FROM [dbo].[Transactions] AS [t0]
LEFT OUTER JOIN [dbo].[TransactionSamples] AS [t1]
ON (COALESCE([t0].[ParentTransactionID],[t0].[TransactionID])) = [t1].[TransactionID]
0 голосов
/ 21 сентября 2009

Я бы написал этот SQL-запрос как

select *, ISNULL(T.ParentTransactionID, T.TransactionID) TransactionId
from transactions T
JOIN TransactionSample ts ON (ts.TransactionID = T.TransactionID OR ts.TransactionID =  T.ParentTransactionID)
where T.TransactionID = 227511

Что поместит TransactionId как обычный столбец в последнем операторе запроса Select в вашем выражении LINQ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...