Как выбрать элемент в списке N, используя функцию расширения Where? - PullRequest
1 голос
/ 12 сентября 2010

Предположим, у меня есть класс AddressType, определенный как

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

Имея объект List в коде, как выбрать объект AddressType с известным свойством AddressTypeId?

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

Спасибо!

Ответы [ 2 ]

2 голосов
/ 12 сентября 2010

Вы можете получить все 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 голосов
/ 12 сентября 2010
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;
...