Linq2EF возвращает тип дочернего класса в проекции запроса - PullRequest
1 голос
/ 19 августа 2010

Если у меня есть сущности, которые наследуются от базовой сущности (скажем, «Виджеты», «Гаджеты» и «Гизмос» наследуются от «Устройства»), и я хочу запросить устройства и вернуть конкретный тип каждого элемента в результате проекция, вот так:

from d in Devices
select new
{
   Name = d.Name,
   Type = d.GetType()
};

Что бы вернуть список вроде:

Spring, Widget
Gear, Gizmo
Tape, Gadget
Scissors, Gizmo
Screw, Widget

Конечно, EF жалуется, потому что GetType () не является канонической функцией SQL Server. Есть ли способ сделать это?

1 Ответ

1 голос
/ 20 августа 2010

Есть два пути. Если задействовано только несколько типов, вы можете сделать:

from d in Devices
let typeName = d is Spring ? "spring" : d is Widget ? "widget" : "etc."
select new
{
   Name = d.Name,
   Type = typeName
};

Безобразно, но необходимо в случаях.

Альтернативно, перейдите в L2O:

(from d in Devices
 select new
 {
    Name = d.Name,
    Obj = o
 }).AsEnumerable()
   .Select(
     d => new 
          {
              Name = d.Name,
              Type = d.GetType()
          });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...