如何使用lambda表达式和linq从范围中获取元素?

时间:2013-04-03 14:48:59

标签: c# linq lambda

如何使用lambda和linq按范围获取元素?

例如:

我有一个包含54个元素的表。我只想从1-10或10-20或20-30之类的元素中获取元素 - 通常是一些数值范围。

我该怎么做?

6 个答案:

答案 0 :(得分:10)

List<int> list = new List<int>();
IEnumerable<int> interval = list.Skip(a).Take(b);

答案 1 :(得分:5)

您可以使用Enumerable.SkipEnumerable.Take方法;

  

绕过序列中指定数量的元素然后返回   其余的元素。


  

从a的开头返回指定数量的连续元素   序列

List<int> yourlist = new List<int>(){1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
IEnumerable<int> newlist = yourlist.Skip(2).Take(3);

foreach(var i in newlist)
{
   Console.WriteLine(i);
}

输出将是;

3
4
5

这是DEMO

答案 2 :(得分:3)

如果你想要的是分页,

int pageIndex = 1;
int pageSize= 10

List<object> list = new List<object>();
IEnumerable<object> interval = list.Skip(pageIndex*pageSize).Take(pageSize);

答案 3 :(得分:1)

像这样:

MyList.Skip(x).Take(y);

答案 4 :(得分:1)

您可以使用

.Skip(n1).Take(n2)

答案 5 :(得分:1)

使用List<T>.GetRange(int index, int count);

List<int> numbers = new List<int>() { 1, 2, 3, 4, 5, 6 };
List<int> firstThreeNumbers = numbers.GetRange(0, 3);
List<int> lastThreeNumbers = numbers.GetRange(numbers.Count - 3, 3);

不要SkipTake,只需GetRange

希望这有帮助!