2015-03-20 3 views
1

Любая идея, что я могу делать неправильно. Я пытаюсь вернуть объект Type AppRole, соединяя 2 таблицы. Но я получаю ошибку. Явное построение типа объекта «AppRole» в запросе недопустимо. Как я могу получить объект типа AppRole, который соответствует условию.Тип объекта сущности в запросе не допускается

AppRole RoleName = (from role in dbContext.AppRoles 
              join user in dbContext.AppUsers on role.RoleID equals user.RoleID 
              where user.UserName.Contains(userNameDL) 
              select new AppRole 
              { 
               RoleID = role.RoleID, 
               RoleName = role.RoleName, 
               Description = role.Description, 
               Status = role.Status, 
               UpdateDate = role.UpdateDate 
              }).FirstOrDefault(); 
+2

0 Вам нужно просто выполнить роль select .FirstOrDefault(); ' – markpsmith

ответ

2

Вы не можете напрямую создать этот объект, поскольку только что узнали об этом. Когда вы вызываете select new AppRole{}, вы явно создаете новый, что необязательно, поскольку в вашем запросе уже есть группа из AppRole объектов. Вы просто хотите вытащить одну из коллекции.

Вместо этого вы можете просто сделать это:

AppRole RoleName = (from role in dbContext.AppRoles 
        join user in dbContext.AppUsers on role.RoleID equals user.RoleID 
        where user.UserName.Contains(userNameDL) 
        select role) 
        .FirstOrDefault(); 

select new или .Select() (с лямбда) для создания проекции, как правило, к другому типу данных. Так как вы выполняете запрос на уже созданные объекты AppRole, нет необходимости в этом, и вместо этого мы можем просто вернуть первое, что соответствует.

Как ПОЧЕМУ вы не можете сделать это, это потому, что при выполнении запроса LINQ-to-SQL (это также имеет место в LINQ-к-сущностей) будет переводить код на SQL, однако создание объекта не могут быть переведены на SQL, поэтому вы получите сообщение об ошибке, которое вы только что испытали.

+0

msdn say: [Выражение запроса должно начинаться с предложения from и должно заканчиваться предложением select или group.] (Https: // msdn. microsoft.com/en-us/library/bb384065.aspx) – Grundy

+1

@Grundy Вы абсолютно правы, просто обновили свой ответ. Прошло некоторое время с тех пор, как я использовал этот стиль для создания запросов. Обычно я использую лямбда-стиль. Просто обновил свой ответ. – JNYRanger

+0

Спасибо JNYRanger ... он РАБОТАЕТ. – bp581

Смежные вопросы