Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从嵌套的对象列表中获取不同的值?_C#_Linq - Fatal编程技术网

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