【问题标题】:LINQ GroupBy-Rank-SumLINQ GroupBy-Rank-Sum
【发布时间】:2013-06-13 17:30:31
【问题描述】:

我正在尝试编写一段 LINQ 代码,它允许我从一个对象中提取信息,该对象基本上由一个包含 2 个字符串属性和一个字典属性的扩展列表组成,其中字典的类型为 <string, double>,列表中的每一行。

我尝试了 GroupBy、Select、Sum 的各种组合,并在其他线程中搜索了类似的内容,但所有其他与字典相关的问题似乎都没有几层复杂性。

我的目标是按第一个字符串属性对 List 对象中的数据进行分组,然后对步骤 1 中每个分组字符串的一个 Dictionary 条目进行小计。然后我想从字典中获取前 5 个小计通过来自 step1 的分组字符串。

        var result = List<ListObject>
            .Where(i => i.string2 == "June")
            .GroupBy(i => i.string1)
            .Sum(i => i.Sum(s => s.Values.TryGetValue("Value1",0.0))
           .Take(5));

Also adding the ListObject definition as requested

public class ListObject{
    public string string1{ get; set; }
    public string string2{ get; set; }

    public Dictionary<string, double> Values { get; set; }

}

【问题讨论】:

  • 你能发布 ListObject 变量的类定义吗?
  • ListObject.Where 没有任何意义,因为ListObject 是一个类。你从什么开始?单个ListObjectList&lt;ListObject&gt;
  • 更清楚一点 - 我们从 类型的列表开始

标签: linq


【解决方案1】:

如果我没有正确阅读问题,您可能正在寻找类似这样的内容:

var los = new List<ListObject>();
string sumField = "Value1";

var result = los
    .Where(lo => lo.string2 == "June")
    .GroupBy(lo => lo.string1)
    .Select(g => new {
        Key = g.Key,
        Total = g
            .Where(x => x.Values.ContainsKey(sumField))
            .Sum(s => s.Values[sumField]),
    })
    .OrderByDescending(t => t.Total)
    .Take(5);

【讨论】:

    【解决方案2】:

    你的意思是这样的:

    someEnumerable.GroupBy(e => e.SomeDictionary.Values.Sum());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多