c#-Linq-项目列表将列表与列表中的C对象分组在一起

我有类似的课程:

public class A {
    public DateTime Date { get; set; }
    public int Hour { get; set; }
    public decimal Value { get; set; }
}

public class B {
    public DateTime Date { get; set; }
    public C C { get; set; }
}

public class C {
    public int Hour { get; set; }
    public decimal Value { get; set; }
}

我有一个List< A>其中包含一系列日期,每个日期都有小时值.我正在尝试将其从该格式转换为B型,因此使用List< B>.

例如,如果列表A中有3天的数据, (即24 x 3 = 72个记录),则在列表< B>中应该有3个类型为B的对象. -每天24小时分成一个C型.

我知道我可以使用嵌套的foreach循环来做到这一点,但我认为LINQ会更优雅,并且在性能上也可能更好.

我正在尝试的代码是:

var res = from a in AList
          select (new List<B>
          {
              new B
              {
                  Date = a.Date,
                  C = new C() 
                  { 
                      Hour = a.Hour, 
                      Value = a.Value 
                  }
              }
          });

但是它返回一个没有日期分组的列表.我不确定如何建立该分组.将不胜感激!

解决方法:

从逻辑上讲,您的B类似乎应该包含C个实例的集合:

public class B {
    public DateTime Date { get; set; }
    public ICollection<C> C { get; set; }
}

因此,您可以使用group by来填充以下实例:

var res = 
(
    from a in AList
    group a by a.Date into g
    select new B
    {
        Date = g.Key,
        C = 
        (
            from c in g
            select new C
            { 
                Hour = c.Hour, 
                Value = c.Value 
            }
        ).ToList()
    }
).ToList();
上一篇:嵌套组Linq查询与Groupby扩展方法


下一篇:如何使用Python在一个时间段内对行进行分组