gpt4 book ai didi

c# - Linq - 项目列表 到分组列表 与列表 中的 C 对象

转载 作者:行者123 更新时间:2023-11-30 16:03:26 25 4
gpt4 key购买 nike

我有这样的类(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();

25 4 0