Как получить только строки базовой таблицы при использовании Table-per-Type с Entity Framework? - PullRequest
0 голосов
/ 14 января 2012

У меня есть следующие таблицы, сопоставленные в Entity Framework 4.2 как таблица для каждого типа.

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 ]

2 голосов
/ 14 января 2012

Попробуйте

var basicGear = db.Gear.Where(g => !(g is Weapon || g is Armor));
0 голосов
/ 14 января 2012

Так как вы хотите все строки, которые не являются конкретно оружием или броней.Как правило, я бы сказал, что вы можете попробовать использовать метод Except .

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 в Entity Framework (на основе некоторые ответы здесь они предполагают, что это не так, но эта страница MSDN предполагает, что это возможно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...