モデルクラスに投影するために、階層ごとのテーブルを使用しています。Linq to Entities で型を使用すると、すべての結果は常に射影された最後の型になります。私が意味するのは、ドメインモデルにこれらがある場合です:
public interface IPerson { string Name {get;set;} }
public abstract class Person : IPerson { public string Name { get;set; } }
public class Employee : Person{ }
public class Manager : Person { }
そして、名前とタイプの列を持つ Person テーブルがあり、階層ごとにテーブルを使用して特定のエンティティ (EmployeeEntity および ManagerEntity と呼びます) を生成します。
このコードを使用すると:
IQueryable<IPerson> people = entities.OfType<ManagerEntity>().Select(x => new Manager
{ Name = x.name }).Concat(entities.OfType<EmployeeEntity>().Select(y => new Employee
{ Name = y.name }));
var projectedPeople = people.ToList();
ProjectedPeople 内のすべてのタイプのオブジェクトは Employee であり、タイプ Manager である必要があるオブジェクトも含まれます。Concat 呼び出しを削除して個別に実行すると、正しいタイプ (マネージャーまたは従業員) が返されます。
ここで何が間違っていますか?オブジェクトのダミー リストを作成し、それらに対して AsQueryable を呼び出し、続いてプロジェクションを実行することで、方程式から Linq を削除するテスト コードをいくつか書きましたが、それは正常に機能しました。