Linq查询从嵌套对象获取值

时间:2016-11-28 16:05:34

标签: c# linq

我需要从嵌套对象中提取特定值而不使用foreach循环。我认为这里的正确方法是一个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);

但我的语法一定不正确,因为我无法抓住我需要的值?

1 个答案:

答案 0 :(得分:2)

如果您需要访问(嵌套)集合的项目SelectMany,那么您的朋友是:

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

您的语法错误,因为FirstOrDefault的重载需要一个谓词(所以函数返回bool),但您传递的是FirstOrDefault(x => x.Address.Address1)

如果您需要以某种方式过滤它(&#34;来自嵌套对象的特定值&#34;),您需要更准确地解释您的需求。