2010-03-24 64 views
5

我知道我不应该有同样的价值。这只是虚构的,所以忽略了这一点。如何使用lambda表达式筛选对象列表?

我:

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表达式来检索具有1

预期效果的一个ID的所有汽车:

 
-- Id: 1, Name: Honda 
-- Id: 1, Name: Nissan 

的问题是更多的过滤基于外键的对象列表。

回答

15

使用LINQ:

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

使用List<T>.FindAll

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

我宁愿LINQ办法亲自 - 请注意,这是懒惰的,而立即FindAll查看整个列表并用t建立一个新列表他的结果。

+0

我不同意LINQ首选项,你首先需要知道代码的上下文,然后才能决定是否进行惰性初始化或不是。 – 2010-03-27 11:14:17

+0

@Tim:我通常会使用LINQ和' ToList'后来打电话,如果我想急于评估,只是为了一致性。在某些情况下,FindAll可能会稍微简单一些,但这确实限制了您将'List '作为源代码,而不是只需要'IEnumerale '。 – 2010-03-27 15:58:09

4

试试这个

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