2009-09-21 11 views
2

Comment cela peut-il être écrit dans LINQen utilisant le cas dans 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 

Répondre

3

Un cas est fondamentalement juste un conditionnel.

... où (ts => ts.TransactionID == (T.ParentTransactionID ?? T.TransactionID)) ...

-1

Je voudrais écrire cette requête SQL comme

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 

qui placerait le TransactionId comme une colonne normale dans l'opérateur de requête de sélection finale dans l'expression LINQ

1

Ce serait écrit en LINQ comme:

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; 
} 

Dans votre exemple, vous utilisez un CASE pour revenir à une valeur non nulle, ce qui est vraiment la même chose comme COALESCE(case1, case2):

SELECT ... 
FROM [dbo].[Transactions] AS [t0] 
LEFT OUTER JOIN [dbo].[TransactionSamples] AS [t1] 
ON (COALESCE([t0].[ParentTransactionID],[t0].[TransactionID])) = [t1].[TransactionID] 
Questions connexes