将LINQ分组数据传递到新的对象列表中

3
我正在尝试在C#中创建一个LINQ查询,它接受一个对象列表,并对其进行分组和计数,然后将结果传递到一个新的对象列表中。
目前这是我的LINQ查询,它执行分组和计数,但不会将数据转移到我需要的列表中,而是生成匿名类型的列表。
var dataPoints = from e in evaluations.Take(20)
                 group e.EvaluationID by e.description into g
                 select new { Profession = g.Key, Count = g.Count() };
dataPoints 变量返回一个匿名类型列表,数据看起来像这样:
[0] Profession = "Doctor", Count = 12 
[1] Profession = "Nurse", Count = 6 
[2] Profession = "Health Visitor", Count = 2

我希望返回一个 DataPoint 对象列表,而不是将数据返回为匿名类型的列表。下面是我的 DataPoint 对象。

public class DataPoint
{
    public DataPoint(double y, string label)
    {
        this.Y = y;
        this.Label = label;
    }

    [DataMember(Name = "y")]
    public Nullable<double> Y = null;

    [DataMember(Name = "label")]
    public string Label;
}

我尝试修改我的查询,变成了这样,但是出现了一个错误,说DataPoint没有包含不带参数的构造函数。
var dataPoints = from e in evaluations.Take(20)
                  group e.EvaluationID by e.description into g
                  select new DataPoint { Count = g.Count(), Profession = g.Key};

任何建议都非常感谢。

1
使用 new DataPoint(g.Count(), g.Key) - Micha Wiedenmann
1个回答

2
为了使属性初始化程序工作,您需要一个无参数的构造函数,并且您的字段应该是可访问的属性:
public class DataPoint
{
    [DataMember(Name = "y")]
    public Nullable<double> Y  { get; set; };

    [DataMember(Name = "label")]
    public string Label { get; set; }

    public DataPoint()
    {
    }

    public DataPoint(double y, string label)
    {
       Y = y;
       Label = label;
    }
}

现在你的代码应该可以编译了,或者按照评论中的建议使用带参数的构造函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接