LINQ - 从特定索引开始从列表中获取项目

时间:2017-01-06 10:01:38

标签: c# linq

在LINQ的帮助下,我需要根据条件从列表中获取项目。为此,它应该仅考虑从(provided index - 3)到提供索引(动态)的项目。

例如,列表包含项{1,3,5,7,9,11,13}。如果提供的索引是4,那么它应该考虑从索引2开始到索引4结束的总共三个索引。在这三个项目中,应该用条件过滤它们 - 比如,项目应该大于5。

结果应为 - {7,9}

我尝试的是,这是错的,我被困住了:

list.Select(item => list.Select(index => item[index - 3] && item > 5).ToList());

2 个答案:

答案 0 :(得分:17)

听起来你只想要混合使用SkipTake,并使用Where进行过滤:

var query = list.Skip(index - 3)    // Start at appropriate index
                .Take(3)            // Only consider the next three values
                .Where(x => x > 5); // Filter appropriately

我个人认为索引是 end 点而不是 start 点似乎有点奇怪,请注意。您可能想看看其他代码是否会从更改它中获益。

答案 1 :(得分:2)

SkipTake的替代方法是在Where子句中包含项目索引

list.Where((x, i) => // x is the list item, i is its index
    i > (index - 3) && i <= index && // index bounds
    x > 5 // item condition
)

对于具有单个子范围项目的特定要求,我会使用SkipTake,但如果您需要更复杂的项目索引条件,您可以利用此Where重载。