Csharp/C#教程:使用LINQ按多个属性分组并求和分享


使用LINQ按多个属性分组并求和

我有一个项目集合,这里是:

AgencyID VendorID StateID Amount Fee 1 1 1 20.00 5.00 1 1 1 10.00 2.00 1 1 1 30.00 8.00 2 2 1 20.00 5.00 2 2 1 5.00 5.00 1 1 2 20.00 5.00 2 2 2 20.00 5.00 2 2 2 40.00 9.00 1 2 2 35.00 6.00 1 2 2 12.00 3.00 

我希望根据AgencyID,VendorID和StateID对这些项目进行分组,并根据金额和费用(金额+费用)计算总计

所以使用上面的数据,我想得到这些结果:

 AgencyID VendorID StateID Total 1 1 1 75.00 2 2 1 35.00 1 1 2 25.00 2 2 2 74.00 1 2 2 56.00 

这就是我现在所拥有的,它只是获取数据库中的每一行:

 var agencyContracts = _agencyContractsRepository.AgencyContracts. Select(ac => new AgencyContractViewModel { AgencyContractId = ac.AgencyContractID, AgencyId = ac.AgencyID, VendorId = ac.VendorID, RegionId = ac.RegionID, Amount = ac.Amount, Fee = ac.Fee }); 

有谁知道如何使用LINQ过滤和分组?

分组后使用.Select()

 var agencyContracts = _agencyContractsRepository.AgencyContracts .GroupBy(ac => new { ac.AgencyContractID, // required by your view model. should be omited // in most cases because group by primary key // makes no sense. ac.AgencyID, ac.VendorID, ac.RegionID }) .Select(ac => new AgencyContractViewModel { AgencyContractID = ac.Key.AgencyContractID, AgencyId = ac.Key.AgencyID, VendorId = ac.Key.VendorID, RegionId = ac.Key.RegionID, Amount = ac.Sum(acs => acs.Amount), Fee = ac.Sum(acs => acs.Fee) }); 

Linus在这个方法中很受欢迎,但是一些房产已经关闭。 看起来’AgencyContractId’是您的主键,它与您想要给用户的输出无关。 我认为这就是你想要的(假设你改变你的ViewModel以匹配你在视图中想要的数据)。

上述就是C#学习教程:使用LINQ按多个属性分组并求和分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 var agencyContracts = _agencyContractsRepository.AgencyContracts .GroupBy(ac => new { ac.AgencyID, ac.VendorID, ac.RegionID }) .Select(ac => new AgencyContractViewModel { AgencyId = ac.Key.AgencyID, VendorId = ac.Key.VendorID, RegionId = ac.Key.RegionID, Total = ac.Sum(acs => acs.Amount) + ac.Sum(acs => acs.Fee) }); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1301102.html

(0)
上一篇 2023年1月8日
下一篇 2023年1月8日

精彩推荐