Учитывая, как все будет выглядеть, когда вы вызываете этот метод ... предположительно, это будет выглядеть примерно так:
object obj = GetObject(257, "Type1");
Я не могу придумать, как сделать тип возвращаемого значения более конкретным, поскольку объекты в EF не имеют общего базового класса и не реализуют общий интерфейс. Конечно, вы могли бы заставить их реализовать такой интерфейс (как предполагает Адам, хотя и с другой целью), а затем переписать ваш метод следующим образом:
public IMyInterface GetObject(int id, string typeName) {
switch(typeName) {
case "Type1":
return (IMyInterface)db.Type1s.SingleOrDefault(t => t.TypeID == id);
case "Type2":
return (IMyInterface)db.Type2.SingleOrDefault(t => t.TypeID == id);
default:
return null;
}
}
Тогда ваш код вызова будет выглядеть так:
IMyInterface intf = GetObject(257, "Type1");
intf.DoSomethingHelpful();
Конечно, мое предположение о вашем телефонном коде может быть неверным.