Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 子实体中的总和值_Linq_Entity Framework - Fatal编程技术网

Linq 子实体中的总和值

Linq 子实体中的总和值,linq,entity-framework,Linq,Entity Framework,我有一个具有父类和两个子类的实体,如下所示: 税务报告-->包裹-->税务员 税务报告包含包裹的集合,包裹包含税务员的集合 “我的纳税报告”对象有两个与其关联的地块对象,每个地块对象有两个与其关联的收税人对象。Tax Collector对象有一个我感兴趣的名为Taxes Due的属性。以下是数据示例: 税务报告:1 包裹:0001 税务员:达拉斯县,应缴税款100美元 税吏:科林县,应缴税款50美元 包裹:0002 税务员:科林县,应付税款1000美元 税务员:欧文市,应缴税款100美元 我想查

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

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

税务报告包含包裹的集合,包裹包含税务员的集合

“我的纳税报告”对象有两个与其关联的地块对象,每个地块对象有两个与其关联的收税人对象。Tax Collector对象有一个我感兴趣的名为Taxes Due的属性。以下是数据示例:

税务报告:1

包裹:0001
税务员:达拉斯县,应缴税款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