我将以下表格映射到Entity Framework 4.2中,作为table-per-type。
Gear (ID, Name, Description) // base table
Weapon (ID, Damage, Bonus) // FK to Gear table.
Armor (ID, Kinetic, Energy) // FK to Gear table.
我可以单独拿到武器和装备:
var weapons = db.Gear.OfType<Weapon>(); // Gets just weapons.
var armor = db.Gear.OfType<Armor>(); // Gets just armor.
但我无法弄清楚如何获得基本行。我希望这样的东西可以工作,但它仍然可以得到所有这些。
var basicGear = db.Gear.OfType<Gear>();
答案 0 :(得分:2)
尝试
var basicGear = db.Gear.Where(g => !(g is Weapon || g is Armor));
答案 1 :(得分:0)
因为你想要的所有行都不是专门的武器或盔甲。一般来说,我会说您可以尝试使用Except method。
var weapons = db.Gear.OfType<Weapon>(); // Gets just weapons.
var armor = db.Gear.OfType<Armor>(); // Gets just armor.
var allOtherStuff = db.Gear.Except(weapons).Except(armor);
甚至
var allOtherStuff = db.Gear.Except(weapons.Union(armor));
但是,我不知道Except是否在实体框架内有一个SQL转换(基于some answers,他们建议它可能没有,但MSDN page可能会建议它。)< / p>