我有这样的代码(我简化了实际情况)
public class A
{
public List<B> list { get; set; }
}
public class B
{
public List<C> list{ get; set; }
}
public class C
{
public DateTime Date { get; set; }
public int num { get; set; }
}
我想对今天的日期的num值求和。
但总是有一个错误,因为我在列表(在A类中)有一个列表(在B类中)
我能怎么做?
我尝试
A a = new A();
B b1 = new B();
C C1 = new C() { Date = DateTime.Today, num = 2 };
C C2 = new C() { Date = DateTime.Today.AddDays(1), num = 3 };
b1.list.Add(C1);
b1.list.Add(C2);
a.list.Add(b1);
B b2 = new B();
C C3 = new C() { Date = DateTime.Today, num = 4 };
C C4 = new C() { Date = DateTime.Today.AddDays(1), num = 5 };
b2.list.Add(C3);
b2.list.Add(C4);
a.list.Add(b2);
var tot = (from l in a.list
where l.list.Where(x => x.Date == DateTime.Today)
select l;
最佳答案
您可以使用外部列表中的SelectMany
来“拉平”内部列表,如下所示:
var tot = a.list.SelectMany(bItem => bItem.list)
// From this point on, you see a "flat" IEnumerable<C>
.Where(cItem => cItem.Date == DateTime.Today)
.Sum(cItem => cItem.num);
关于c# - linq列表数的总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24327525/