我如何使用lambda表达式过滤对象列表?

7

我知道不应该有相同值的id。这只是虚构的,所以请忽略。

我有:

List<Car> carList = new List<Car>();
carList.Add(new Car() { id = 1, name = "Honda" });
carList.Add(new Car() { id = 2, name = "Toyota" });
carList.Add(new Car() { id = 1, name = "Nissan" });

我想使用Lambda表达式检索所有ID为1的汽车。
预期结果:
-- Id: 1,名称:本田
-- Id: 1,名称:日产
问题更多地是基于外键过滤对象列表。
2个回答

18

使用LINQ:

IEnumerable<Car> matchingCars = carList.Where(car => car.id == 1);

使用 List<T>.FindAll

List<Car> matchingCars = carList.FindAll(car => car.id == 1);

个人而言,我更喜欢使用 LINQ 方法 - 注意它是惰性执行的,而 FindAll 则会立即遍历整个列表并构建结果集合。


我不同意LINQ的偏好,你需要先了解代码的上下文,才能决定是否采用延迟初始化... - Tim Mahy
@Tim:如果我想要急切地评估,我通常会使用带有ToList调用的LINQ,只是为了保持一致性。在某些情况下,FindAll可能会更简单,尽管这会限制您只能使用List<T>作为源,而不仅仅是需要IEnumerable<T> - Jon Skeet

5

试试这个

var match = carList.Where(x => x.id ==1 );

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