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();
标签:grouping,linq,c 来源: https://codeday.me/bug/20191118/2031322.html