【发布时间】:2017-02-06 18:09:05
【问题描述】:
我意识到这个问题的名称令人困惑,所以让我来解释一下我的场景。
我有一个对象列表。该列表对每个用户都有一个条目。然后每个用户都有一个类别列表,每个类别都有一个类别 id,以及一些已经计算过的值。我需要在一个类别列表中展平我的对象,其中每个类别的属性已被求和。每个用户在其列表中的类别数量相同,并且每个类别都将出现在每个用户的列表中(换句话说,每个用户将拥有相同的类别列表,只是计算出的属性不同)。
我的课程是:
public class category {
public int categoryID { get; set; }
public decimal categoryValue { get; set; }
public decimal categoryValue2 { get; set; }
}
public class user {
public List<category> categories { get; set; }
}
我需要实现的是通过使用 Linq(或任何最有效的方式)将数据展平为单个列表,其中类别仍按其各自的 ID 拆分,但 categoryValue 和 categoryValue2 已分别总计。因此,所有用户的每个类别的总价值为 2。
我尝试过如下循环:
List<category> categoryTotals = new List<category> {};
foreach (category loopCategory in users[0].categories) {
category currentCategory = new category();
category = users.Select(x => x.categories).Where(y=>y.categoryID== loopCategory.categoryID)).Select(t => new {t....
}
但是 t 给了我 linq 函数,而不是我想要求和的属性。
我也尝试过仅使用 linq 的类似方法,但是在执行 SelectMany 之后,再执行 GroupBy,随后的 select 语句再次不会公开类别列表的属性。
非常感谢!
【问题讨论】:
-
users.SelectMany(u => u.categories)将为您提供所有用户的所有类别的单一平面序列。 -
@Ed Plunkett 指出。但是,然后我需要按 ID 对这些类别的平面序列进行分组,并计算每个类别的值。