【问题标题】:select distinct name and combine an objects property in a List<T>选择不同的名称并在 List<T> 中组合对象属性
【发布时间】:2016-10-26 14:45:58
【问题描述】:

我有一个下面的列表,我正在尝试结合 T.name 属性并总结 T.score 属性

数据

Name | score
-------------
Jon  | 50
Jon  | 100
Ash  | 100
Ash  | 75

想要的结果是

Jon  | 150
Ash  | 175

我可以在 LINQ 中执行此操作并创建一个具有所需结果的 var

List<PieSeriesData> PiSeriesData = new List<PieSeriesData>();
var x = PiSeriesData.GroupBy(i => i.Name)
                    .Select(g => new { Id = g.Key, Total = g.Sum(i => i.Score) })
                    .ToList();

问题是我需要 x 成为 List 类型,这是 HighCharts nuget 所需要的。

【问题讨论】:

  • x 是一个列表...具有 2 个属性(Id、Total)的匿名类型的通用列表。请更好地解释问题,因为目前还不清楚
  • 如果你打电话给.ToList(),那么x应该是List&lt;T&gt;。不是吗?
  • PieSeriesData 有超过 2 个属性,如果我理解正确的话,x 只是当前 2 个属性 ID 和名称的列表
  • 那么不是创建匿名对象而是创建PieSeriesData 对象。
  • 是的,因为您正在选择一个只有 2 个属性的匿名类型。你想要的输出类型是什么?

标签: c# linq highcharts


【解决方案1】:

据我从聊天中了解到,您需要输出为List&lt;PieSeriesData&gt;。您需要在select 中投影PieSeriesData 类的新对象,而不是匿名类型:_请注意,您还需要分配存在的属性,而不是使用新的属性,例如IdTotal

List<PieSeriesData> PiSeriesData = new List<PieSeriesData>();
var x = PiSeriesData.GroupBy(i => i.Name)
                    .Select(g => new PieSeriesData { 
                        Name = g.Key, 
                        Score = g.Sum(i => i.Score) 
                    }).ToList();

// Now x is of type: List<PieSeriesData>

【讨论】:

  • 感谢您一对一地与我联系 Gilad,这正是我需要的 x 现在等同于 List 类型
  • @jon.nicholssoftware.com - 欢迎您 :) 很高兴我能提供帮助
【解决方案2】:

为什么不创建新类

public class PieSeriesRenderData
{
    public string ID { get; set; }
    public int Total { get; set; }
}

然后返回这个:

List<PieSeriesData> piSeriesData = new List<PieSeriesData>();
var x = piSeriesData.GroupBy(i => i.Name)
                    .Select(g => new PieSeriesRenderData { Id = g.Key, Total = g.Sum(i => i.Score) })
                    .ToList();

现在您将拥有 List&lt;PieSeriesRenderData&gt; 的对象,您可以将其作为 Json 从您的 Web 服务返回,您将在您的 ajax.successful 方法中呈现 highchart。

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 2015-11-22
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多