我想使用Linq来查询我项目中的公交时刻表,以便随时可以获得下一个5次公交车到达时间.如何将查询限制为前5个结果?
更一般地说,我如何在C#中获取一个列表?(在Python中我会mylist[:5]用来获得前5个元素.)
Mat*_*ton 646
var firstFiveItems = myList.Take(5);
Run Code Online (Sandbox Code Playgroud)
或切片:
var secondFiveItems = myList.Skip(5).Take(5);
Run Code Online (Sandbox Code Playgroud)
当然,按照某种顺序获取前五个项目通常很方便:
var firstFiveArrivals = myList.OrderBy(i => i.ArrivalTime).Take(5);
Run Code Online (Sandbox Code Playgroud)
net*_*tos 67
如果有人感兴趣(即使问题没有要求这个版本),在C#2中将是:(我已经编辑了答案,遵循一些建议)
myList.Sort(CLASS_FOR_COMPARER);
List<string> fiveElements = myList.GetRange(0, 5);
Run Code Online (Sandbox Code Playgroud)
工作示例:
[Test]
public void TestListLinqTake()
{
List<string> elements = new List<string>() { "storm", "earth", "fire"};
List<string> noErrorThrown = elements.Take(5).ToList();
List<string> someElements = elements.Take(2).ToList();
Assert.True(
someElements.First().Equals("storm") &&
someElements.Count == 2 &&
noErrorThrown.Count == 3);
}
Run Code Online (Sandbox Code Playgroud)
别忘了
using System.Linq;
Run Code Online (Sandbox Code Playgroud)
基于贝拉明头的评论
就像pagination您可以使用以下公式进行服用slice of list or elements:
var slice = myList.Skip((pageNumber - 1) * pageSize)
.Take(pageSize);
Run Code Online (Sandbox Code Playgroud)
示例1:前五个项目
var pageNumber = 1;
var pageSize = 5;
Run Code Online (Sandbox Code Playgroud)
示例2:后五个项目
var pageNumber = 2;
var pageSize = 5;
Run Code Online (Sandbox Code Playgroud)
示例3:前五个项目
var pageNumber = 3;
var pageSize = 5;
Run Code Online (Sandbox Code Playgroud)
如果通知配方参数
pageSize = 5并且pageNumber正在更改,则要更改切片中的项目数,请更改pageSize。