使用LINQ

时间:2016-05-04 11:47:50

标签: c# linq

说我有:

struct myStruct
{
    int index;
}

如果我有List<List<List<myStruct>>> lists

有没有办法

1)获取具有myStruct.index = 0

的所有元素

2)确保订购到位? (例如,lists[0][j][k]将始终位于结果中的lists[1][j][k]之前。

我尝试使用类似lists.FindAll(x=>...)格式的内容,但我无法弄清楚如何为大于1D的列表表达它,而且我不确定结果排序。

4 个答案:

答案 0 :(得分:3)

你可以使用SelectMany并将列表展平

lists.SelectMany(x=>x.SelectMany(s=>s))
     .Where(x=>x.index ==0);

答案 1 :(得分:0)

试试这个

UIView *myView;
    self.window.rootViewController = myView

        myView= self.viewController;
        [self.window makeKeyAndVisible];

答案 2 :(得分:0)

我从未发现SelectMany易于阅读。

怎么样?
(from l1 in lists
from l2 in l1
from x in l2
where x.index == 0).ToList();

答案 3 :(得分:0)

您最好的选择是使用SelectMany将其展平,然后使用简单的Where子句;

 list3d
    .SelectMany(x => x)
    .SelectMany(y => y)
    .SelectMany(z => z)
    .Where(item => <your condition here>);

SelectMany采用一个序列(如List<List<List<T>>>),将每个序列转换为序列,然后将所有序列展平为一个大序列。因此,您希望将3d列表展平为单个序列,然后将其视为一个简单的过滤器。