在使用带有实体框架的Table-per-Type时,如何仅获取基表行?

时间:2012-01-14 00:22:19

标签: c# linq entity-framework-4

我将以下表格映射到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>();

2 个答案:

答案 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>