2012-01-14 3 views
0

次の表は、Entity Framework 4.2で表ごとにマップされています。Entity Frameworkで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

をお試しくださいそれとも、特に武器や装甲ではないすべての列が欲しいということですか? – Reddog

+0

私は武器や鎧ではないすべての装備を手に入れたいと思います。 – Jason

答えて

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)); 

除いては、彼らはそれがないかもしれない示唆ここにsome answersに基づくEntity Frameworkの中にSQLへの変換を(持っていますが、これMSDN pageが示唆している場合しかし、私は認識していませんよかもしれない)。

2

すべての武器や防具にもギアなので、何がすべての行を取得して間違っている?

var basicGear = db.Gear.Where(g => !(g is Weapon || g is Armor)); 
関連する問題