如何使用 LinQ 到实体查询选择两个对象之一,具体取决于其中一个是否为 null

本文关键字:取决于 null 是否 一个 对象 实体 LinQ 何使用 查询 选择 两个 | 更新日期: 2023-09-27 18:31:54

List<IStoreItem> StoreItems = new List<IStoreItem>();             
StoreItems = repository.ProductToCatMaps.Where(x => CatList.Contains(x.ExCatID))
             .Select(x => x.ProductShell ?? x.PCBuild);

实体类:

    public class ProductShell : IStoreItem
    {
    }
    public class PCBuild : IStoreItem
    {
    }

ProductToCatMaps 表包含每个类别 ID各自的商店项目,我有两种商店项目类型:ProductShell和PCBuild。我希望根据哪个设置为空来选择任何一个,只有一个可以包含一个值(数据库中相应类型条目的 Foregn 键),我需要选择该值。

如何使用 LinQ 到实体查询选择两个对象之一,具体取决于其中一个是否为 null

将你的意图转换为SQL几乎是不可能的(或者可能只是不可能*),因为完全填充ProductShell的SQL将与获得PCBuild的sql完全不同。我会切换方向并在内存中执行查询的最后一部分。类似的东西

StoreItems = repository.ProductToCatMaps
                       .Where(yourCondition)
                       .Select(x => new { x.ProductShell, x.PCBuild })
                       .AsEnumerable() // *** pulls above into memory
                       .Select(x => (IStoreItem)x.ProductShell ?? (IStoreItem)x.PCBuild);

*当然,我还没有在家里尝试过你的方法,所以如果它确实有效(经过一些修改,我假设通过询问,到目前为止你所拥有的东西不起作用),那么向 EF 团队致敬。