我有这样的代码(我简化了实际情况)

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/

10-12 01:21
查看更多