其他分享
首页 > 其他分享> > CodeGo.net>在GroupBy和Sum聚合的ObservableCollection上使用LINQ

CodeGo.net>在GroupBy和Sum聚合的ObservableCollection上使用LINQ

作者:互联网

我有下面的代码块工作正常;

var boughtItemsToday = (from DBControl.MoneySpent
            bought in BoughtItemDB.BoughtItems
            select bought);

BoughtItems = new ObservableCollection<DBControl.MoneySpent>(boughtItemsToday);

它从我的MoneySpent表返回数据,其中包括ItemCategory,ItemAmount,ItemDateTime.

我想将其更改为按ItemCategory和ItemAmount分组,这样我就可以看到我将大部分钱花在哪里,因此我创建了一个GroupBy查询,并最终得到了此结果;

var finalQuery = boughtItemsToday.AsQueryable().GroupBy(category => category.ItemCategory); 

BoughtItems = new ObservableCollection<DBControl.MoneySpent>(finalQuery);

这给了我两个错误;

错误1’System.Collections.ObjectModel.ObservableCollection.ObservableCollection(System.Collections.Generic.List)’的最佳重载方法匹配具有一些无效的参数

错误2参数1:无法从“ System.Linq.IQueryable>”转换到“ System.Collections.Generic.List”

这就是我卡住的地方!如何在1个LINQ查询中使用GroupBy和Sum聚合函数获取我的类别列表和相关支出?

感激收到任何帮助/建议.

标记

解决方法:

.GroupBy(类别=> category.ItemCategory);返回一个可枚举的IGrouping对象,其中每个IGrouping的键是一个不同的ItemCategory值,并且该值是MoneySpent对象的列表.因此,您将无法像当前那样将这些分组简单地放入ObservableCollection中.

相反,您可能希望将每个分组结果选择到新的MoneySpent对象中:

var finalQuery = boughtItemsToday
    .GroupBy(category => category.ItemCategory)
    .Select(grouping => new MoneySpent { ItemCategory = grouping.Key, ItemAmount = grouping.Sum(moneySpent => moneySpent.ItemAmount);

BoughtItems = new ObservableCollection<DBControl.MoneySpent>(finalQuery);

标签:sum,observablecollection,linq,c,group-by
来源: https://codeday.me/bug/20191101/1983947.html