2011-01-28 45 views
2

我有这个类的对象的列表:使用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 class ChartSeries 
{ 
    public string Name { get; set; } 
    public List<uint> Values { 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 } }}} 
}; 

我想将第一个列表转换为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} }, 
}; 

我该如何与Linq做到这一点?

回答

6

在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() 
     }; 
+0

+1,漂亮的(比我好,再次)。 :) – RPM1984 2011-01-28 00:49:59