代码之家  ›  专栏  ›  技术社区  ›  RizJa

Linq-项目列表<A>到分组列表<B>,列表<B〕中有一个C对象

  •  3
  • RizJa  · 技术社区  · 8 年前

    我有这样的课程:

    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> (即24 x 3=72条记录),则在 列表<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 
                      }
                  }
              });
    

    但它返回一个没有日期分组的列表。我不知道如何建立这个分组。非常感谢您的帮助!

    2 回复  |  直到 3 年前
        1
  •  2
  •   Douglas    8 年前

    从逻辑上看,你的 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();
    
        2
  •  1
  •   Bassem    8 年前
            var newAList = from a in AList
                           select new B 
                           { 
                               Date = a.Date,
                               C = new C { Hour = a.Hour, Value = a.Value }
                           };
    

    LINQ:优雅?对但性能比嵌套循环好吗?我不确定。