代码之家  ›  专栏  ›  技术社区  ›  CodeGrue

查询投影中子类的Linq2EF返回类型

  •  1
  • CodeGrue  · 技术社区  · 14 年前

    如果我有从基本实体继承的实体(比如“Widgets”、“Gadgets”和“gizmo”从“Device”继承),并且我希望查询设备并返回结果投影中每个项目的特定类型,如下所示:

    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 cannonical函数。有办法吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Craig Stuntz    14 年前

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