0
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。我希望根据哪个设置为空来选择其中一个,只有一个可以包含我需要选择的值(数据库中相应类型条目的外键)。

4

1 回答 1

3

将您的意图转换为 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 团队表示敬意。

于 2012-04-21T00:56:28.937 回答