我首先使用代码构建了一个数据库。我发现使用投影查询到具体类型是迄今为止最快的方法,比使用
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
即:我投影到一个匿名类型,然后构建具体的类型,这一切都有效。我非常希望能够直接投影到混凝土类型。能做到吗?