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

如何使用Linq将导航属性投影到实体?

  •  0
  • Dabblernl  · 技术社区  · 13 年前

    我首先使用代码构建了一个数据库。我发现使用投影查询到具体类型是迄今为止最快的方法,比使用 Include 声明。然而,我遇到了以下问题:

    dim records=(From record in db.SomeDbSet
                 Where record.UserID=userID
                 Select New UserSpecificRecord With
                 { .Name=record.User.Name
                   .Tasks=record.Tasks
                 }).ToList
    

    在执行.Tasks=部分时,我会收到不同的错误,从无效的强制转换异常到Enity Framework不支持这种查询的消息,这取决于我为UserSpecificRecord类的Tasks属性创建的集合的类型。

    当我将代码更改为:

     Dim records= (From record in db.SomeDbSet
                     Where record.UserID=userID
                     Select New With
                     { .Name=record.User.Name
                       .Tasks=record.Tasks
                     }).ToList
    
       dim userRecords=(From record in records
                        Select New UserSpecificRecord With
                        { .Name=record.Name
                         .Tasks=record.Tasks
                         }).ToList
    

    即:我投影到一个匿名类型,然后构建具体的类型,这一切都有效。我非常希望能够直接投影到混凝土类型。能做到吗?

    1 回复  |  直到 13 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    您不能投影到“实体”(是您的 UserSpecificRecord 也映射了吗?从名字上看似乎是这样)。
    这与“混凝土课”无关。

    看到这个答案 The entity cannot be constructed in a LINQ to Entities query