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 の 2 つのストア アイテム タイプがあります。どちらがnullに設定されているかに応じてどちらかを選択したいのですが、選択する必要がある値(データベース内のそれぞれのタイプエントリへの外部キー)を含むことができるのは1つだけです。

4

1 に答える 1

3

ProductShell を完全に設定するための SQL は、PCBuild を取得するための SQL とはまったく異なるため、意図を 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 に答える