林克。如何查询列表中的列表?

标签 linq entity-framework lambda

我有商店列表(storeList)对象。 (由商店列表组成) 每个商店都有地址列表。每个地址都有 AddressType 属性,可以是 PHYSICAL、ALTERNATIVE 或 MAILING。

我正在尝试返回物理地址对象,以便我可以修改其属性:

这是我的第一次尝试:

StoreAddressList result = 
    (from str in storeList
     where
     str.AssetAddresses.Any(p => p.AddressType.Name == "PHYSICAL")
     select str.AssetAddresses).FirstOrDefault();

因此,我希望获得仅包含一项的列表(其中地址类型为物理),但我得到包含 3 个项目的列表(具有所有三种类型)。这里出了什么问题?

谢谢

最佳答案

通过将每个商店投影到其地址列表来展平地址列表,使用 SelectMany 实现展平,然后仅采用地址类型为物理的地址列表:

var addressesToModify = 
    storeList.SelectMany(store => store.AssetAddresses)
             .Where(address => address.AddressType.Name == "PHYSICAL");

在查询语法中:

var addressesToModify =
    from store in storeList
    from address in store.AssetAddresses
    where address.AddressType.Name == "PHYSICAL"
    select address;

请注意它的读法与我们所描述的完全一样。来自 storeList 中的每个 store,来自 store.AssetAddresses 中的每个 address,其中 address 是物理地址,选择地址

现在迭代查询结果并根据需要进行修改。

另外,我强烈建议创建一个枚举

public enum AddressType { Physical, Alternative, Mailing }

并将Address.AddressType更改为这种类型

public AddressType AddressType { get; }

然后你就可以写了

where address.AddressType == AddressType.Physical

.Where(address => address.AddressType == AddressType.Physical);

关于林克。如何查询列表中的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8403232/

相关文章:

c# - 对于 LINQ 中的循环...可能吗?

lambda - 如何在 UML 类图中表示 lambda?

.net - 为什么当参数作为参数传递时 sp_executesql 运行速度变慢

c# - 如何将 EF 查询与字典连接起来

c# - 使用 Entity Framework 分组

c# - Entity Framework SQL Server 错误消息语言

entity-framework - EF4;向模型添加外键

c++ - 如何对 unique_ptr 列表进行排序?

c# - "Cannot convert lambda expression to type ' string ' because it is not a delegate type"在C#中查询数据集

c# - 将 HTML 添加到 XElement