2009-09-21 4 views
2

Как это может быть записано в LINQиспользуя случай 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

Случай, в основном только условно.

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

-1

Я хотел бы написать, что 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 как нормальный колонки в окончательном Выбор оператора запроса в вашем выражении LINQ

1

Это было бы написано в 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] 
Смежные вопросы