VQ.NET Linq to Entities Query с дочерними объектами - PullRequest
1 голос
/ 14 октября 2011

В основном у меня есть следующее:

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

В основном у меня ситуация много ко многим, и я пытаюсь получить все объекты Quicklinks по их ролям и не совсем уверен, почему EF приведёт к одному AdminCoreModel.Roleкогда i.Roles представляет собой набор объектов.

Любая помощь с благодарностью

1 Ответ

1 голос
/ 14 октября 2011

Ну, .Contains() ожидает один Role, и вы передаете ему список.Вот что говорит ошибка.

Попробуйте (заранее извиняюсь, если я искажаю синтаксис VB.NET; я обычно не пишу VB.NET):

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})
                          }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...