我想在我的项目中使用Linq来查询一个公交时刻表,这样在任何时候我都可以得到接下来的5个公交到达时间。如何将查询限制在前5个结果?
更一般地说,我如何在c#中获取一个列表的切片?(在Python中,我会使用mylist[:5]来获取前5个元素。)
我想在我的项目中使用Linq来查询一个公交时刻表,这样在任何时候我都可以得到接下来的5个公交到达时间。如何将查询限制在前5个结果?
更一般地说,我如何在c#中获取一个列表的切片?(在Python中,我会使用mylist[:5]来获取前5个元素。)
当前回答
dataGridView1.DataSource = (from S in EE.Stagaire
join F in EE.Filiere on
S.IdFiliere equals F.IdFiliere
where S.Nom.StartsWith("A")
select new
{
ID=S.Id,
Name = S.Nom,
Prénon= S.Prenon,
Email=S.Email,
MoteDePass=S.MoteDePass,
Filiere = F.Filiere1
}).Take(1).ToList();
其他回答
dataGridView1.DataSource = (from S in EE.Stagaire
join F in EE.Filiere on
S.IdFiliere equals F.IdFiliere
where S.Nom.StartsWith("A")
select new
{
ID=S.Id,
Name = S.Nom,
Prénon= S.Prenon,
Email=S.Email,
MoteDePass=S.MoteDePass,
Filiere = F.Filiere1
}).Take(1).ToList();
工作的例子:
[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);
}
不要忘记
using System.Linq;
根据Bellarmine Head的评论
像分页一样,你可以使用下面的公式来获取列表或元素的切片:
var slice = myList.Skip((pageNumber - 1) * pageSize)
.Take(pageSize);
例1:前五项
var pageNumber = 1;
var pageSize = 5;
例2:后五项
var pageNumber = 2;
var pageSize = 5;
例3:第三五项
var pageNumber = 3;
var pageSize = 5;
如果注意到公式参数pageSize = 5和pageNumber正在改变,如果你想改变切片中的项目数,你改变pageSize。
我认为这是正确的答案,适用于从8.0开始的c#版本:
是的!它允许我们像在Python中一样工作。
来自c# 8.0文档:
c# 8.0特性规范:
该特性提供了两个新的操作符,允许构造System。索引和系统。Range对象,并在运行时使用它们来索引/切片集合。
c#将点字符(..)作为范围操作符
例子:
var array = new int[] { 1, 2, 3, 4, 5 };
var slice1 = array[2..^3]; // array[new Range(2, new Index(3, fromEnd: true))]
var slice2 = array[..^3]; // array[Range.EndAt(new Index(3, fromEnd: true))]
var slice3 = array[2..]; // array[Range.StartAt(2)]
var slice4 = array[..]; // array[Range.All]
如果有人感兴趣(即使问题不要求这个版本),在c# 2中将是:(我已经编辑了答案,以下是一些建议)
myList.Sort(CLASS_FOR_COMPARER);
List<string> fiveElements = myList.GetRange(0, 5);