c# - 按字典 LINQ 分组
问题描述
我有一个包含字典列表的列表。Dictionary 包含带有 DateTime 值的键“date”,以及对应于十进制数字值的各种其他键。我想按日期分组并对每个十进制数字进行平均。
我以前用 linq 做过这个,但似乎无法用字典弄清楚。
List<object> list = new List<object>();
Dictionary<string,object> dictionary = new Dictionary<string,object>
dictionary.Add("date", date)
foreach( field in json )
{
dictionary.Add(field.Key, field.Value)
}
list.Add(dictionary);
list = list.GroupBy(m => (DateTime)m["date"], m => "not sure what to do here", (k,d) => (new object[]{k, d.Average()}).ToList()).ToList();
m["date"]
也不行。
字典有以下数据:
- “关键”数据-“价值” 05/29/2015 05:50:06
- “键”处理时间 - “值” 6
- “键”磁盘使用情况 - “值” 2
当 中没有更多项目时json
,将字典添加到列表中并重复该过程。
解决方案
根据您的描述,您似乎正在使用字典来表示“字段”/“属性”种类及其值,并且它们连接到每个:
字典包含带有 DateTime 值的键“日期”,以及对应于十进制数字值的各种其他键
如果是这种情况,您最好创建一个自定义类,将这些键中的每一个作为类的不同属性。就像是:
public class YourClass
{
public Date DateTime { get; set; }
public int SomeProperty1 { get; set; }
public int SomeProperty2 { get; set; }
// ....
}
一旦你这样做了,而不是有一个List<Dictionary<string,object>>
然后有一个List<YourClass>
。现在可以很容易地执行您想要的 linq:
我想按日期分组并对每个小数进行平均。
var result = listOfCustomTypes.GroupBy(i => i.DateTime)
.Select(g => new YourClass {
Date = g.Key,
SomeProperty1 = g.Average(i => i.SomeProperty1),
SomeProperty2 = g.Average(i => i.SomeProperty2),
});
最后,由于您的数据最初是 JSON 格式,您可以:
- 如何将 JSON 对象转换为自定义 C# 对象?
- 或者最好还是使用 Linq to JSON 来操作数据:Querying JSON Nested Arrays with Linq, JSON.NET, C#
推荐阅读
- linux - 密件抄送无法与邮件命令一起正常工作
- python - 使用循环搜索文本文件
- sql - SQL从另一个表中选择匹配数据,其中匹配列具有相同的数据
- iis - 创建虚拟目录以访问共享网络驱动器
- python - 比较 for 循环中列表的差异
- javascript - 当没有服务器可用于处理请求时,Node.js 需要更好地理解 http.request 操作
- javascript - 当使用ngrx和Angular 6从外部组件发出事件时,如何更新状态对象?
- sql - 在两个日期之间,我如何使用一个 ID 获取所有日期
- python - pip install wheel 随机失败
- css - 物化:如何在模式之外“推送”选择输入?