使用Linq获取列表中对象的索引

43

我是Linq的新手。我有一个Customers表,其中ID、FullName、Organization和Location是列名。我在Sqlite中有一个查询,返回2500条客户记录。我需要从这个结果集中找到ID=150的客户的索引。这是一个客户列表,查询结果按组织排序。我尝试使用FindIndex和IndexOf方法,但前者出现错误,后者返回-1。请问应该如何解决?谢谢。

2个回答

87

您不需要使用 LINQ,您可以使用 List<T>FindIndex 方法:

int index = customers.FindIndex(c => c.ID == 150);

2
不错,我不知道这个方法。 - Sergey Berezovskiy
7
很遗憾,这并没有定义为 LINQ 方法,因此只有在使用真正的纯 List<T> 而不是任何 IList<T> 时才有用。 - O. R. Mapper
4
你还可以使用Array.FindIndex<T> - Tim Schmelter
@O.R.Mapper 可以将这个方法应用到大多数实现了 IEnumerables 或 ObservableCollections 接口的集合上,只需使用 .ToList().FindIndex() 即可。 - Wilhelm
1
@Wilhelm:如果我要查找的元素可能在前几个项目中,那么我不太喜欢评估整个枚举的想法。另外,请注意,在可以使用从 ToArray() 获得的数组的情况下,永远没有使用 ToList() 的好理由。 - O. R. Mapper

37

Linq to Objects 重载了 Select 方法。

customers.Select((c,i) => new { Customer = c, Index = i })
         .Where(x => x.Customer.ID == 150)
         .Select(x => x.Index);

请记住,您需要在内存中拥有 List<Customer> 才能使用此 Linq to Objects 方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接