2016-11-28 54 views
2

我需要從嵌套對象中拉出特定值而不使用foreach循環。我認爲這裏正確的方法是一個linq查詢,但我無法獲得我需要的值。考慮到類結構:Linq查詢從嵌套對象獲取值

public class Order 
{ 
    public int OrderID { get; set; } 
    public List<OrderItems> { get; set; } 
} 

public class OrderItems 
{ 
    public int OrderItemID { get; set; } 
    public string ItemName { get; set; } 
    public int Quantity { get; set; } 
    public List<OrderItemShipping> OrderItemShippings { get; set; } 
} 

public class OrderItemShipping 
{ 
    public int OrderItemShippingID { get; set; } 
    public Address ShipAddress { get; set; } 


public class Address 
{ 
    public int AddressID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Address1 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string PostalCode { get; set; } 
} 

我希望能夠做一些事情,如:

var shipToAddress = Order.OrderItems.OrderItemShipping.FirstOrDefault(x => x.Address.Address1); 

但我的語法必須是不正確的,因爲我不能搶我需要的價值?

+0

也許'SelectMany'是你在找什麼? – DavidG

+1

其中是您的屬性名稱類型'列表'在訂單類? –

+0

你需要在你的linq中有一些操作,比如x => x.Address.Address1 ==「something」 –

回答

2

如果您需要訪問的(嵌套)集合SelectMany項目是你的朋友:

var shipToAddress = Order.OrderItems 
    .SelectMany(oi => oi.OrderItemShipping.Select(ois => ois.ShipAddress.Address1))) 
    .FirstOrDefault(); 

你的語法是錯誤的,因爲FirstOrDefault超負荷預計謂詞(以便返回bool功能),但你正在通過:FirstOrDefault(x => x.Address.Address1)

如果您需要以某種方式過濾它(「來自嵌套對象的特定值」),您需要更精確地解釋您的需求。

+0

謝謝,這正是我所需要的。 – PixelPaul