2010-02-22 100 views
4

我有两个LINQ语句,我想将它们合并为一个,但对于我的生活,我无法实现它。我不能让分组在第一个语句中工作。 它抱怨TotalBuyTotalSell属性不存在,虽然不抱怨AmountTCAmountAUDLINQ JOIN + GROUP BY + SUM

这应该很简单。有什么想法吗?

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

作为边注,ItineraryItemRecordsTransactionRecords是由SubSonic处理类类别。

这真的应该很简单,所以任何帮助,将不胜感激。

问候, 约翰

+0

@JohnBob - 我用c#标签重新标记了您的问题,以便它可能会得到更多的注意,因为没有人回复。 – dugas 2010-02-22 14:44:01

回答

10

,稍有差错,更正为:

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

我建议不要使用重新标识 - 将有助于避免在未来这些错误。

+0

嘿, 我很欣赏这里的帮助,感谢您的评论。 不幸的是,我已经抛出了这个代码,它不工作。 它抱怨TotalBuy和TotalSell。 “无法解析符号TotalBuy” 'ResSystem.Library.Objects.Transaction'没有包含'TotalBuy'的定义,也没有接受'ResSystem.Library.Objects.Transaction'类型的第一个参数的扩展方法'TotalBuy'可能是发现 这里的语法有什么问题? – JohnBob 2010-02-22 22:59:47

+0

没关系。 我最终分裂成三个单独的查询。 两个组通过查询,然后通过查询加入这两个组。 – JohnBob 2010-02-23 00:42:17

+0

感谢您的帮助! – JohnBob 2011-06-07 08:50:46