C# 数据结构列表-如何使用linq访问?

C# 数据结构列表-如何使用linq访问?,c#,linq,C#,Linq,一家软件制造商给了我一个c#程序,它可以访问一个文件,并给我一个数据结构列表 List<List<dataPt_struct>> RasterSet = new List<List<dataPt_struct>>(); 等等。在这些索引中,我有另一个包含实际数据结构的“索引”列表 [0] [X] [Y] [Z] ... [399] [X] [Y] [Z] 现在我需要访问列表列表中数据结构的X,Y,Z部分

一家软件制造商给了我一个c#程序,它可以访问一个文件,并给我一个数据结构列表

List<List<dataPt_struct>> RasterSet = new List<List<dataPt_struct>>();
等等。在这些索引中,我有另一个包含实际数据结构的“索引”列表

[0]
   [X] 
   [Y] 
   [Z] 
...
[399]
   [X]
   [Y]
   [Z]
现在我需要访问列表列表中数据结构的X,Y,Z部分。例如,是否可以使用LINQ来表示

if (RasterSet[i] >= 0 && Rasterset[i] =< 10)
RasterSet[i].Average(z=> z.Z);
if(光栅集[i]>=0&&光栅集[i]=<10)
光栅集[i]。平均值(z=>z.z);
给我一个“索引”[0]到[10]中包含的所有Z值的平均值,每个索引都有数百或数千个二级索引,每个二级索引都有[x][y][Z]值


编辑:我拼凑了一个双foreach,它的工作原理是从复杂结构中生成一个普通列表,然后在该列表上使用普通linq。我还是很想一次完成这一切。谢谢大家的建议

像这样的东西我可以

var avg = from i in RasterSet
      let innerRasterSet = RasterSet[i]
      where i > 0 && i <= 10
      select innerRasterSet.Average(z=> z.Z);
var avg=来自光栅集中的i
设innerRasterSet=RasterSet[i]
其中i>0&&i z.z);

要获得总平均值:

var average = RasterSet.SelectMany(x => x).Average(x => x.Z);
要从索引0-10中获取子列表的平均值,请执行以下操作:

var average = RasterSet.GetRange(0, 10).SelectMany(x => x).Average(x => x.Z);

如果我正确理解了您的需求:

RasterSet.SelectMenu(rs => rs.Take(11)).Average(x => x.Z)

我建议使用以下代码

RasterSet.Take(10).SelectMany(x => x.Z).Average();

如果要进行分页,也可以使用Skip()函数

如果我没有错,则可以使用SelectMany函数,然后对其应用average函数。不幸的是,我遇到了一个错误(不包含Z的定义,也没有扩展方法……)。我认为这是因为datastruct仍然是一个列表。我犯了一个错误,现在应该没事了:-)干杯,伙计,这很好,而且是一个简单易懂的更改。我喜欢这种语法,但我得到了一个“无法从泛型.list转换为int”错误,这是你的错误,我的错。
RasterSet.Take(10).SelectMany(x => x.Z).Average();