【问题标题】:Group By Dictionary LINQ按字典 LINQ 分组
【发布时间】:2019-03-20 13:41:04
【问题描述】:

我有一个包含字典列表的列表。 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"] 也不起作用。

字典有以下数据:

  1. “键”数据-“值”05/29/2015 05:50:06
  2. “键”处理时间-“值”6
  3. “键”磁盘使用 - “值”2

json 中没有更多项目时,将字典添加到列表中并重复该过程。

【问题讨论】:

  • 您可以发布您尝试过的内容吗?更容易从不适合你的东西中找到答案
  • 我不会做你的作业 :p 对不起哥们
  • 日期项可能相差不到一秒,不会分组。因此,在分组之前,请使用 DateTime 属性“日期”将日期截断为一天的开始时间。
  • 正如其他人所说:这个网站不是要寻求完整的解决方案,而是要在不适合您的情况下获得帮助。请至少提供您的对象的代码以及您尝试执行的操作。
  • @HugoSilva - 请显示您尝试过的内容以及此类字典的一些示例数据

标签: c# linq group-by


【解决方案1】:

根据您的描述,您似乎正在使用字典来表示“字段”/“属性”种类及其值,并且它们与每个种类相关联:

字典包含带有 DateTime 值的键“日期”,以及对应于十进制数字值的各种其他键

如果是这种情况,您最好创建一个自定义类,将这些键中的每一个作为类的不同属性。比如:

public class YourClass 
{
    public Date DateTime { get; set; }
    public int SomeProperty1 { get; set; }
    public int SomeProperty2 { get; set; }
    // ....
}

一旦你这样做了,而不是有一个List&lt;Dictionary&lt;string,object&gt;&gt; 然后有一个List&lt;YourClass&gt;。现在可以很容易地执行您想要的 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 格式,您可以:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2016-01-16
    相关资源
    最近更新 更多