LINQ JOIN + GROUP BY + SUM - PullRequest
       16

LINQ JOIN + GROUP BY + SUM

4 голосов
/ 22 февраля 2010

У меня есть два заявления LINQ, которые я хотел бы сделать одним, но из-за своей жизни я не могу заставить их работать.

Я не могу заставить работать группу в первом утверждении. Он жалуется, что свойства TotalBuy и TotalSell отсутствуют, хотя не жалуется на AmountTC и AmountAUD.

Это должно быть просто. Есть мысли?

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

В качестве примечания ItineraryItemRecords и TransactionRecords являются коллекциями классов, обработанных SubSonic.

Это действительно должно быть просто, поэтому любая помощь будет принята.

С уважением, John

1 Ответ

10 голосов
/ 22 февраля 2010

Небольшая ошибка, исправлено:

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

Я рекомендую против повторного использования идентификаторов - поможет избежать этих ошибок в будущем.

...