在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());
答案 0 :(得分:17)
听起来你只想要混合使用Skip
和Take
,并使用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)
Skip
和Take
的替代方法是在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
)
对于具有单个子范围项目的特定要求,我会使用Skip
和Take
,但如果您需要更复杂的项目索引条件,您可以利用此Where
重载。