Анонимный тип запроса linq не может быть преобразован в объект POCO - PullRequest
6 голосов
/ 20 февраля 2012

У меня следующий запрос linq ...

public List<UserProject> GetProjectsByUser(int userid)
{
    //var query =
    return (
               from p in this.Entities.Projects
               join c in this.Entities.Categories 
                   on p.CategoryId equals c.CategoryId
               join u in this.Entities.Users 
                   on p.UserId equals u.UserId
               where p.UserId == 11
               select
                   new
                       {
                           p.ProjectId,
                           u.UserName,
                           p.UserId,
                           ProjectName = p.Name,
                           ProjectDescription = p.Description,
                           CategoryName = c.Name
                       }
               into pcup
               join m in this.Entities.Messages
                   on
                   pcup.ProjectId equals m.ProjectId
                   into pm
               select
                   new {
                       pcup.ProjectId, 
                       pcup.UserId, 
                       pcup.ProjectName, 
                       pcup.ProjectDescription, 
                       Messages = pm
                   }
           ).ToList<UserProject>();
}

и у меня есть следующий объект просмотра, который я пытаюсь заполнить ....

public class UserProject
{
    UserProject()
    {
        Messages = new EnumerableQuery<Message>();
    }

    public int ProjectId;
    public int UserId;
    public string ProjectName;
    public string ProjectDescription;
    public IEnumerable<Message> Messages;
    //public string UserName;
    //public string CategoryName;
    //public int CategoryId;
}

В проекте может быть 0 или сообщения. Моя цель здесь - передать список объектов UserProject моему представлению MVC, каждый объект UserProject может иметь коллекцию сообщений. Я получаю следующую ошибку

Ошибка 1 Аргумент экземпляра: невозможно преобразовать из 'System.Linq.IQueryable<AnonymousType#1>' в 'System.Collections.Generic.IEnumerable<Riebro.Services.UserProject>'

Ошибка 2 'System.Linq.IQueryable<AnonymousType#1>' не содержит определения для 'ToList', а лучшая перегрузка метода расширения 'System.Linq.Enumerable.ToList<TSource>(System.Collections.Generic.IEnumerable<TSource>)' имеет недопустимые аргументы

В настоящее время сущность сообщений не имеет свойства навигации для проектов ... оно должно ... я добавлю это изменение позже ... но в данный момент мне просто нужно продолжать работать.

EDIT

В настоящее время запрос linq выглядит следующим образом ...

    return (
               from p in this.Entities.Projects
               join c in this.Entities.Categories 
                   on p.CategoryId equals c.CategoryId
               join u in this.Entities.Users 
                   on p.UserId equals u.UserId
               where p.UserId == userid
               select
                   new 
                       {
                           p.ProjectId,
                           u.UserName,
                           p.UserId,
                           p.Name,
                           p.Description,
                           //CategoryName = c.Name
                       }
                   into pcup
                   join m in this.Entities.Messages
                       on
                       pcup.ProjectId equals m.ProjectId
                       into pm
                   select
                       new UserProject { 
                           ProjectId = pcup.ProjectId, 
                           UserId = pcup.UserId,  
                           ProjectName = pcup.Name, 
                           ProjectDescription = pcup.Description, 
                           Messages = pm 
                       }
           ).ToList<UserProject>();

и класс представления выглядит следующим образом ...

public class UserProject
{
    public UserProject()
    {
        Messages = new List<Message>();
    }

    public int ProjectId;
    public string UserName;
    public int UserId;
    public string ProjectName;
    public string ProjectDescription;
    public List<Message> Messages;
    //public string CategoryName;
    //public int CategoryId;
}

и теперь я получаю следующую ошибку ...

Ошибка 1 Не удалось неявно преобразовать тип 'System.Collections.Generic.IEnumerable<Riebro.Message>' в 'System.Collections.Generic.List<Riebro.Message>'. Существует явное преобразование (вам не хватает приведения?)

1 Ответ

15 голосов
/ 20 февраля 2012

Вы должны создать экземпляр UserProject вместо анонимного объекта в вашем операторе select.

 select new UserProject 
            {
                ProjectId = pcup.ProjectId,
                UserID = pcup.UserId,
                ProjectName = pcup.ProjectName,
                ProjectDescription = pcup.ProjectDescription, 
                Messages = pm
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...