Linq 子实体中的总和值
我有一个具有父类和两个子类的实体,如下所示: 税务报告-->包裹-->税务员 税务报告包含包裹的集合,包裹包含税务员的集合 “我的纳税报告”对象有两个与其关联的地块对象,每个地块对象有两个与其关联的收税人对象。Tax Collector对象有一个我感兴趣的名为Taxes Due的属性。以下是数据示例: 税务报告:1 包裹:0001Linq 子实体中的总和值,linq,entity-framework,Linq,Entity Framework,我有一个具有父类和两个子类的实体,如下所示: 税务报告-->包裹-->税务员 税务报告包含包裹的集合,包裹包含税务员的集合 “我的纳税报告”对象有两个与其关联的地块对象,每个地块对象有两个与其关联的收税人对象。Tax Collector对象有一个我感兴趣的名为Taxes Due的属性。以下是数据示例: 税务报告:1 包裹:0001 税务员:达拉斯县,应缴税款100美元 税吏:科林县,应缴税款50美元 包裹:0002 税务员:科林县,应付税款1000美元 税务员:欧文市,应缴税款100美元 我想查
税务员:达拉斯县,应缴税款100美元
税吏:科林县,应缴税款50美元 包裹:0002
税务员:科林县,应付税款1000美元
税务员:欧文市,应缴税款100美元 我想查询我的对象以汇总所有包裹的应付税款,按收税员分组。我希望我的结果是这样的: 达拉斯县,100美元
科林县1050美元
欧文市,100美元 我尝试了以下几点: var taxsummary=来自taxreport.packet.Select(y=>y.TaxCollector)中的tr。Select(n=>n.TaxesDue.Sum() 但我一点运气都没有。我的结果总是以多级征收的方式进行预测,每个包裹下面都有应缴税款,而不是按税务员分组。有什么想法吗 谢谢, 布拉德这就做到了:
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);
不得不删除我的第一个方法。我会写一些更聪明的东西。太好了!工作起来很有魅力!我已经在桌子上捶了两天了。我不明白.ToDictionary()的作用,但它是有效的!你的第二个解决方案正是我所需要的。再次感谢!ToDictionary需要两个参数。第一个是返回键的函数,第二个为我们提供值。我不知道它是如何工作的,但我认为它会遍历所有项,然后对键执行第一个lambda,然后对值执行第二个lambda。它基本上映射查询中的每个项,方法是使用每个项键和每个项TaxesDue。它给出了我想要的结果,而没有.ToDictionary()部分,因此我想我将不使用该部分,而映射到GroupedCollector