VB.NET Linq到具有子对象的实体查询

VB.NET Linq到具有子对象的实体查询,vb.net,linq-to-entities,parent-child,Vb.net,Linq To Entities,Parent Child,基本上我有以下几点: Dim ctx As New AdminCoreEntities Dim roles = (From r In ctx.Roles where r.Name.StartsWith("cust") Select r) 'list of System.Linq.IQueryable(Of AdminCoreModel.Role) Dim items = From i In ctx.QuickLinks.Include("Roles") Where

基本上我有以下几点:

Dim ctx As New AdminCoreEntities
Dim roles = (From r In ctx.Roles where r.Name.StartsWith("cust") Select r) 'list of System.Linq.IQueryable(Of AdminCoreModel.Role)

 Dim items = From i In ctx.QuickLinks.Include("Roles")
             Where (i.TenantID = "470556ba-3574-4b01-a619-b85e9721b966" AndAlso i.Roles.Contains(roles))
             Select New With {
                               i.ID,
                               i.Name,
                               .Roles = (From r In i.Roles Select New With {.Id = r.ID, .Name = r.Name})
                              }
运行此操作时出现的错误是:

无法将System.Data.Objects.ObjectQuery`1[AdminCoreModel.Role]类型的对象强制转换为AdminCoreModel.Role类型

基本上,我有一个多对多的情况,我试着通过角色查询所有的QuickLink对象 而且不太清楚为什么当i.Roles是对象集合时,EF将强制转换为单个AdminCoreModel.Role

非常感谢任何帮助。好的,
.Contains()
需要一个
角色
,您正在传递一个列表。错误就是这么说的

试试看(如果我弄坏了VB.NET语法,请提前道歉;我通常不会编写VB.NET):

嗯,
.Contains()
需要一个
角色,而您正在传递一个列表。错误就是这么说的

试试看(如果我弄坏了VB.NET语法,请提前道歉;我通常不会编写VB.NET):


非常感谢,我使用了:AndAlso I.Roles.Any(Function(role)Roles.Contains(role.ID)),原始Roles.StartsWith就是一个例子,我真的需要查询roleIds集合:originalcollection is Dim Roles=(来自ctx.Roles中的r,其中rolesIds.Contains(r.ID)选择r.ID)。ToList()非常感谢,这样做了,我使用了:AndAlso I.Roles.Any(Function(role)Roles.Contains(role.ID)),原始Roles.StartsWith就是一个例子,我确实需要查询roleIds的集合:originalcollection是Dim Roles=(来自ctx.Roles中的r,其中rolesIds.Contains(r.ID)选择r.ID)。ToList()
Dim ctx As New AdminCoreEntities
Dim items = From i In ctx.QuickLinks  ' You don't need Include because you're projecting.
            Where (i.TenantID = "470556ba-3574-4b01-a619-b85e9721b966" 
                   AndAlso i.Roles.Any(Function(role) role.Name.StartsWith("cust"))
            Select New With {
                                i.ID,
                                i.Name,
                                 .Roles = (From r In i.Roles Select New With {.Id = r.ID, .Name = r.Name})
                          }