2016-11-28 2 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

где ваше имя для типа 'List ' в классе заказа? –

+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

Смежные вопросы