C# 如何从嵌套的对象列表中获取不同的值?
我有以下问题:C# 如何从嵌套的对象列表中获取不同的值?,c#,linq,C#,Linq,我有以下问题: foo f = new foo(); // ... f.bars.SelectMany(m => m.qux.GroupBy(x => x.hash)) .Select(group => group.First()) .Sum(s => s.size); 这将返回单个条形实例中qux的总size属性的总和。在另一个bar中添加另一个qux对象以及现有的hash值将被忽略,因此其大小值将计入计算的总和。(即使相同的qux存在于另一个
foo f = new foo();
// ...
f.bars.SelectMany(m => m.qux.GroupBy(x => x.hash))
.Select(group => group.First())
.Sum(s => s.size);
这将返回单个条形实例中qux
的总size
属性的总和。在另一个bar
中添加另一个qux
对象以及现有的hash
值将被忽略,因此其大小
值将计入计算的总和。(即使相同的qux
存在于另一个bar
对象中)
如何调整查询以确保所有具有相同哈希值的对象计算一次
数据结构如下所示:
class foo
{
public List<bar> bars = new List<bar>();
}
class bar
{
public List<qux> qux = new List<qux>();
}
class qux
{
public string hash { get; set; }
public int size { get; set; }
}
class-foo
{
公共列表栏=新列表();
}
分类栏
{
公共列表qux=新列表();
}
类群
{
公共字符串哈希{get;set;}
公共整数大小{get;set;}
}
从您的数据结构判断,以下是您需要的:
int sizeSum =
bars.SelectMany(m => m.qux)
.GroupBy(q => q.hash)
.Select(g => g.First())
.Sum(q => q.size);
与您最初的解决方案不同的是,我们首先使用.SelectMany()
,得到一个统一的列表,然后才使用哈希对其进行分组
,请提供有关您正在使用的数据结构的信息。@DmytroShevchenko,foo有许多条(列表),而条有许多qux(列表)。Qux有两个属性(大小和哈希)。foo.SelectMany()
没有意义,因为foo
不是一个集合。@DmytroShevchenko,谢谢编辑了这个问题。size
的类型应该是int
,而不是string
。