2 つのデータベース テーブルがあり、1 つは完了したアイテムを保持し、もう1 つは未完了のアイテムを保持します。両方のテーブルの構造は同じです。これらのテーブルの 1 つだけを調べたい場合もあれば、両方のテーブルの連結をクエリしたい場合もあります。
クラス
public abstract class SomeBase
{
public int Id {set;get;}
public string Item1 {set;get;}
public string Item2 {set;get;}
}
public class A : SomeBase
{
}
public class B : SomeBase
{
}
マッピング (流暢な API)
public class SomeDatabase : DbContext
{
public DbSet<A> As {set;get;}
public DbSet<B> Bs {set;get;}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<A>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("ATable", "SomeSchema");
}
modelBuilder.Entity<B>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("BTable", "SomeSchema");
}
}
}
この設定を使用すると、両方のテーブルを個別にクエリできます
var db = new SomeDatabase();
var a = db.As;
var b = db.Bs;
2 つを結合しようとすると、構文がよくわかりません。以下の回答の1つの解決策は、それを使用してキャストすることを含みます.AsEnumerable
が、それはすぐに評価されるため、私が探しているものではありません。
db.As.AsEnumerable().Concat<SomeBase>(db.Bs);
db.As.Cast<SomeBase>().Concat(db.Bs.Cast<SomeBase>());
データベース サイトで同一の 2 つの派生クラスを連結するにはどうすればよいですか?
編集:最低レベルで、これらのエラーが発生しています
db.As.Cast<SomeBase>();
Unable to cast the type 'Test.Models.A' to type 'Test.Models.SomeBase'. LINQ to Entities only supports casting Entity Data Model primitive types.
db.As.OfType<SomeBase>();
'Test.Models.SomeBase' is not a valid metadata type for type filtering operations. Type filtering is only valid on entity types and complex types.
関連する質問: 2 つの異なる IQueryable/List/Collection を同じ基本クラスと組み合わせる方法は? LINQ ユニオンと共分散の問題