Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq变换对象_C#_Linq - Fatal编程技术网

C# 使用Linq变换对象

C# 使用Linq变换对象,c#,linq,C#,Linq,我有一个此类对象的列表: public class DataPoint { public class Item { public string name { get; set; } public int total { get; set; } } public List<Item> Items { get; set; } public DateTime Date { get; set; } } public c

我有一个此类对象的列表:

public class DataPoint
{
    public class Item
    {
        public string name { get; set; }
        public int total { get; set; }
    }
    public List<Item> Items { get; set; }
    public DateTime Date { get; set; }
}
public class ChartSeries
{
    public string Name { get; set; }
    public List<uint> Values { get; set; }
}
公共类数据点
{
公共类项目
{
公共字符串名称{get;set;}
公共整数总计{get;set;}
}
公共列表项{get;set;}
公共日期时间日期{get;set;}
}
我想将该数据点列表转换为此类对象的列表:

public class DataPoint
{
    public class Item
    {
        public string name { get; set; }
        public int total { get; set; }
    }
    public List<Item> Items { get; set; }
    public DateTime Date { get; set; }
}
public class ChartSeries
{
    public string Name { get; set; }
    public List<uint> Values { get; set; }
}
公共类图表系列
{
公共字符串名称{get;set;}
公共列表值{get;set;}
}
下面是数据点列表的一个显式示例

IEnumerable<DataPoint> data = new List<DataPoint>() { 
    new DataPoint() { date = DateTime.Today.AddDays(-4), Items = new List<DataPoint.Item>() {new DataPoint.Item() {name="Pirates", total=90 } , {new DataPoint.Item() {name="Buccaneers", total=20 } }}}, 
    new DataPoint() { date = DateTime.Today.AddDays(-3), Items = new List<DataPoint.Item>() {new DataPoint.Item() {name="Pirates", total=80 } , {new DataPoint.Item() {name="Buccaneers", total=19 } }}},
    new DataPoint() { date = DateTime.Today.AddDays(-2), Items = new List<DataPoint.Item>() {new DataPoint.Item() {name="Pirates", total=70 } , {new DataPoint.Item() {name="Buccaneers", total=18 } }}},
    new DataPoint() { date = DateTime.Today.AddDays(-1), Items = new List<DataPoint.Item>() {new DataPoint.Item() {name="Pirates", total=60 } , {new DataPoint.Item() {name="Buccaneers", total=17 } }}},
    new DataPoint() { date = DateTime.Today.AddDays(-0), Items = new List<DataPoint.Item>() {new DataPoint.Item() {name="Pirates", total=50 } , {new DataPoint.Item() {name="Buccaneers", total=16 } }}}
};
IEnumerable data=new List(){
new DataPoint(){date=DateTime.Today.AddDays(-4),Items=new List(){new DataPoint.Item(){name=“Pirates”,total=90},{new DataPoint.Item(){name=“Buccaneers”,total=20}},
new DataPoint(){date=DateTime.Today.AddDays(-3),Items=new List(){new DataPoint.Item(){name=“Pirates”,total=80},{new DataPoint.Item(){name=“Buccaneers”,total=19}},
new DataPoint(){date=DateTime.Today.AddDays(-2),Items=new List(){new DataPoint.Item(){name=“Pirates”,total=70},{new DataPoint.Item(){name=“Buccaneers”,total=18}},
new DataPoint(){date=DateTime.Today.AddDays(-1),Items=new List(){new DataPoint.Item(){name=“Pirates”,total=60},{new DataPoint.Item(){name=“Buccaneers”,total=17}},
new DataPoint(){date=DateTime.Today.AddDays(-0),Items=new List(){new DataPoint.Item(){name=“Pirates”,total=50},{new DataPoint.Item(){name=“Buccaneers”,total=16}}
};
我想将第一个列表转换为ChartSeries列表,如下所示:

IEnumerable<ChartSeries> series = new List<ChartSeries>() {
        new ChartSeries() { Name = "Pirates", Values = new List<uint>() { 90, 80, 70, 60, 50} },
        new ChartSeries() { Name = "Buccaneers", Values = new List<uint>() { 20, 19, 18, 17, 16} },
};
IEnumerable系列=新列表(){
新建ChartSeries(){Name=“Pirates”,value=new List(){90,80,70,60,50},
new ChartSeries(){Name=“Buccaneers”,Values=new List(){20,19,18,17,16},
};
如何使用Linq实现这一点?

在LINQPad中测试:

var q = from d in data
        from i in d.Items
        group i by i.name into g
        select new ChartSeries{
            Name = g.Key,
            Values = g.Select(i => (uint)i.total).ToList()
        };

+每次我看到这样的群查询,我都会爱上linq♥哇,我们心心相印,我的朋友。我发誓我没有看到你的答案就发了。@subkamran:事实上,我相信你。OP提供了足够的信息,使LINQPad成为显而易见的选择,而这确实是最简单(最好的)解决方案。奇怪的事情发生了。:-)