子实体中的总和值

时间:2013-04-25 18:23:59

标签: linq entity-framework

我有一个带有父类和两个子类的实体,如下所示:

税务报告 - >包裹 - >税务员

税务报表包含一组Parcel,而Parcel包含一个Tax Collector集合。

我的Tax Report对象有2个与之关联的Parcel对象,每个Parcel对象都有2个与之关联的Tax Collector对象。 Tax Collector对象有一个名为Taxes Due的属性,我感兴趣。这是一个数据示例:

TaxReport:1

包裹:0001
      税务员:达拉斯县,税款为100美元       税务员:科林县,50美元到期税款

包裹:0002
      税务员:科林县,1000美元到期税       税务员:欧文市,100美元到期税款

我想查询我的对象,以便按税收收集器分组所有包裹的应纳税额。这就是我想要的结果:

达拉斯县,100美元 科林县,1050美元 欧文市,100美元

我尝试过以下几点: var taxsummary = from taxreport.Parcel.Select中的tr(y => y.TaxCollector).Select(n => n.TaxesDue).Sum()

但我没有运气。我的结果始终被预测为多级集合,每个包裹下面都有Taxes Due,而不是按税收收集器分组。有什么想法吗?

谢谢, 布拉德

1 个答案:

答案 0 :(得分:0)

这就是诀窍:

var grouped = from parcel in taxReport.Parcels
              from taxCollector in parcel.TaxCollectors
              group taxCollector by new 
              {
                  Name = taxCollector.Name // Or whatever makes it Unique...
              };

foreach(var collectorGroup in grouped)
{
    Console.WriteLine(collectorGroup.Key.Name + " : " + collectorGroup .Sum(p => p.TaxesDue));
}

如果您想要类似字典的内容,您可以这样做:

var grouped = (from parcel in taxReport.Parcels
               from taxCollector in parcel.TaxCollectors
               group taxCollector by new 
               {
                   Name = taxCollector.Name
               } 
               into groupedCollectors
               select new 
               { 
                   Name = groupedCollectors.Key.Name, 
                   TaxesDue = groupedCollectors.Sum(p => p.TaxesDue)
               }) 
               .ToDictionary(p =>p.Name, p => p.TaxesDue);