2010-02-22 4 views
4

J'ai deux déclarations LINQ que je voudrais faire en un seul, mais pour la vie de moi je ne peux pas le faire fonctionner.LINQ JOIN + GROUP BY + SUM

Je n'arrive pas à faire fonctionner le regroupement dans la première instruction. Il se plaint que les propriétés TotalBuy et TotalSell ne sont pas là, bien que ne se plaignent pas de AmountTC et AmountAUD.

Cela devrait être simple. Des pensées?

var itineraryItems = 
    from ii in this.ItineraryItemRecords 
    join t in this.TransactionRecords on ii.OperatorID equals t. 
    TransactionActor.OperatorID into g select new { 
    OperatorID = ii.OperatorID, TotalBuy = g.Sum(i = >ii.TotalBuy) 
     , TotalSell = g.Sum(i = >ii.TotalSell) 
     , PaidTC = (0 - (g.Sum(t = >t.AmountTC))) 
     , PaidAUD = (0 - (g.Sum(t = >t.AmountAUD))) 
}; 

var itineraryItemz = 
    from i in itineraryItems group i by i.OperatorID into g select new { 
    OperatorID = g.Key, TotalBuy = g.Sum(i = >i.TotalBuy) 
     , TotalSell = g.Sum(i = >i.TotalSell) 
     , PaidTC = (0 - (g.Sum(i = >i.PaidTC))) 
     , PaidAUD = (0 - (g.Sum(i = >i.PaidAUD))) 
}; 

Comme une note de côté, ItineraryItemRecords et TransactionRecords sont les collections de classes gérées par SubSonic.

Cela devrait vraiment être simple, donc toute aide serait appréciée.

Cordialement, John

+0

@JohnBob - Je re-tagged votre question avec une étiquette C# pour qu'il puisse obtenir de plus amples avis que personne n'a encore répondu. – dugas

Répondre

10

Une erreur mineure, corrigée:

var itineraryItems = from ii in this.ItineraryItemRecords 
    join t in this.TransactionRecords on ii.OperatorID equals t.TransactionActor.OperatorID 
    into g 
    select new 
    { 
     OperatorID = ii.OperatorID 
     //, TotalBuy = g.Sum(i => ii.TotalBuy) 
     , TotalBuy = g.Sum(i => i.TotalBuy) 
     //, TotalSell = g.Sum(i => ii.TotalSell) 
     , TotalSell = g.Sum(i => i.TotalSell) 
     , PaidTC = (0 - (g.Sum(t => t.AmountTC))) 
     , PaidAUD = (0 - (g.Sum(t => t.AmountAUD))) 
    }; 

Je recommande contre des identifiants de réutilisant - permettra d'éviter ces erreurs à l'avenir.

+0

Hey, J'apprécie l'aide de vous deux, merci pour le commentaire. Malheureusement, j'ai jeté ce code et ça ne marche pas. Il se plaint de TotalBuy et TotalSell. « Impossible de résoudre le symbole TotalBuy » « ResSystem.Library.Objects.Transaction » ne contient pas une définition pour « TotalBuy » et aucune méthode d'extension « TotalBuy » accepter un premier argument de type « ResSystem.Library.Objects.Transaction » pourrait être trouvé Quel est le problème avec ma syntaxe ici? – JohnBob

+0

Peu importe. J'ai fini par diviser cela en trois requêtes distinctes. deux groupes par des requêtes, puis une joignant ces deux groupes par des requêtes. – JohnBob

+0

merci pour votre aide! – JohnBob