c# - Linq 查询从嵌套对象获取值

标签 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);

但是我的语法一定不正确,因为我无法获取我需要的值?

最佳答案

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

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

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

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

关于c# - Linq 查询从嵌套对象获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40848646/

相关文章:

c# - 如何在 GridView 中的每个单元格周围放置边框?

c# - 如何从 XDocument 获取子节点的值

c# - 如何从文件位置添加图像 WPF

C# lambda 提取单行字符串值

C# - Linq 将泛型列表转换为自定义类

c# - 为什么 XmlSerializer.Order 这样做

c# - 继承和转换对象

c# - 无法将类型 'System.Collections.Generic.IEnumerable<AnonymousType#1>' 隐式转换为 'System.Collections.Generic.List<modelClass>

c# - 什么是将 IDictionary<string, object> 转换为 IDictionary<string, string> 的优雅方法

c# - linq读取xml文件