2011-08-23 4 views
0

Bonjour, je dois joindre deux tables (MainTransaction et SubTransaction), le problème ici est que je veux aussi obtenir tous les enregistrements de Maintransaction qui ne sont pas dans la Subtransaction, je suis coincé dans cette partie, comment Je réalise ceci?Syntaxe Linq joindre et groupe

protected object SelectMainTbl() 
{ 
    var mainIdAndSum = from st in t.subtransaction 
         group st by st.MainTransactionId into g 
         select new 
         { 
          Sum = (from r in g 
            select r.Amount).Sum(), 
          MainId = g.Key 
         }; 

    var mainTbl = from main in t.maintransaction 
        join sub in mainIdAndSum on main.MainTransactionId equals sub.MainId 
        where main.IsEnabled == true && (sub.Sum - main.Amount != 0) 
        select main; 

    return mainTbl; 
} 

Répondre

1

Je pense que ceci est la requête que vous voulez:

from mt in t.maintransaction 
join st in t.subtransaction 
    on mt.MainTransactionId equals st.MainTransactionId 
    into sts 
where mt.IsEnabled 
where sts.Sum(x => x.Amount) - mt.Amount != 0 
select new 
{ 
    MainTransaction = mt, 
    Subtransactions = sts, 
}; 
+0

Salut Merci pour votre réponse, Cependant, ce que je veux réaliser est comme SQL jointure gauche. Le résultat doit retourner tout l'enregistrement de la table Maintransaction même si la table SubTransaction n'a pas encore le maintransactionId inséré, et les colonnes de la table de sous-transaction seront remplies comme nulles dans le résultat. SELECT * FROM maintransaction m Sous-transaction LEFT JOIN m ONMainTransactionId = s.MainTransactionId – William

+0

@ user660810 - Oui, c'est ce que fait ma requête. Le 'en sts 'fait cela. S'il n'y a pas de sous-transactions associées, 'sts' sera une liste vide et vous aurez toujours la transaction principale retournée par la requête. – Enigmativity

+0

J'ai rencontré un problème similaire et 'into 'ne peut être utilisé qu'avec' group join'. Comme je le comprends, 'join' est corrélé à sql inner join et' group join' correspond à sql left join, à peu près. – pseudocoder