我有这样的类(class):
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>
.
例如,如果 List<A>
中有 3 天的数据(即 24 x 3 = 72 条记录),那么 List<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();
关于c# - Linq - 项目列表 <A> 到分组列表 <B> 与列表 <B> 中的 C 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36392433/