Я думаю, Сэм дал хороший ответ: Linq2Sql , похоже, не в состоянии это сделать.
Но до тех пор, пока вы просто хотите имитировать это поведение, я бы делал что-то подобное:
/// <summary>
/// Declare POCO (Plain Old CLR Object) as you would to manipulate your inheritance
/// </summary>
public class Person
{
public abstract void Load();
public abstract void Save();
}
/// <summary>
/// Simulate a consistent behavior
/// </summary>
public class Customer : Person
{
public override void Load()
{
// - Do some Linq2Sql stuff
}
public override void Save()
{
// - Do some Linq2Sql stuff
}
}
Для запросов типа "JOIN" я бы подумал о создании собственных деревьев выражений , если мне это действительно нужно, потому что это быстро становится сложным.
Метод «Left Outer Join», который вы видите в этом примере by hajirazin , также может быть помещен как «protected» в класс Person и вызываться с правильными значениями из «Customer» и других потомков.
В заключение, я думаю, что вся работа должна быть сделана вручную для симуляции запросов в объектах. Деревья выражений могут делать все, но их сложно завершить.
С уважением,