2010-09-12 1 views
1

Предположим, у меня есть класс AddressType определяется как:Как выбрать элемент в списке N, используя функцию расширения?

public class AddressType { 
    public int AddressTypeId { get; set; } 
    public string Description { get; set; } 
} 

Имея список объектов в коде, как я выбираю объект AddressType с известным AddressTypeId недвижимости?

Я никогда не использовал функцию расширения List.Where ....

Спасибо!

ответ

2

Вы можете получить все AddressType объекты в списке, имеющие определенный идентификатор, используя Where:

IEnumerable<AddressType> addressTypes = list.Where(a => a.AddressTypeId == 123); 

Но если вы хотите только один и только AddressType имея конкретный идентификатор, вы можете использовать First:

AddressType addressType = list.First(a => a.AddressTypeId == 123); 

Это найдет первое AddressType в списке, имеющем идентификатор 123, и выдаст исключение, если оно не найдено.

Другой вариант заключается в использовании FirstOrDefault:

AddressType addressType = list.FirstOrDefault(a => a.AddressTypeId == 123); 

Он вернется null если не AddressType имеющие требуемый идентификатор не существует.

Если вы хотите, чтобы убедиться, что именно один AddressType существует в списке, имеющие желаемый идентификатор можно использовать Single:

AddressType addressType = list.Single(a => a.AddressTypeId == 123); 

Это будет сгенерировано исключение, если не будет в точности один AddressType в списке, имеющего идентификатор 123. Single должен перечислить весь список, делая его медленнее, чем First.

0
IEnumerable<AddressType> addressList = ... 
IEnumerable<AddressType> addresses = addressList.Where(a => a.AddressTypeId == 5); 

или:

IEnumerable<AddressType> addresses = 
    from address in addressList 
    where address.AddressTypeId == 5 
    select address;