在 ObservableCollection 上使用 LINQ 和 GroupBy 和 Sum 聚合

MAO*_*MAO 3 c# linq group-by sum observablecollection

我有以下代码块可以正常工作;

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

BoughtItems = new ObservableCollection<DBControl.MoneySpent>(boughtItemsToday);
Run Code Online (Sandbox Code Playgroud)

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

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

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

BoughtItems = new ObservableCollection<DBControl.MoneySpent>(finalQuery);
Run Code Online (Sandbox Code Playgroud)

这给了我 2 个错误;

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

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

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

感激地收到任何帮助/建议。

标记

Mik*_*att 5

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

相反,您可能希望将每个分组的结果 Select 到一个新的 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);
Run Code Online (Sandbox Code Playgroud)