2010-09-12 36 views
1

假設我有定義爲類地址類型是:如何使用Where擴展功能選擇N列表中的元素?

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

具有代碼列表對象,我該如何選擇具有已知AddressTypeId屬性的地址類型對象?

我從來沒有使用過的List.Where擴展功能....

謝謝!

回答

2

您可以通過使用Where得到列表中的所有AddressType對象具有特定ID:

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

但是如果你只想要一個只有AddressType有一個特定的ID可以使用First

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

這將在ID 123列表中找到第一個AddressType,如果找不到,將會拋出異常。

另一個變化是使用FirstOrDefault

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

它將返回null如果沒有AddressType具有請求ID存在。

如果你想確保只有一個AddressType存在於列表具有所期望的ID,你可以使用Single

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

除非恰好有ID列表中的一個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;