Tengo la siguiente consulta LINQ ...consulta LINQ tipo anónimo no puede ser convertido en objeto POCO
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>();
}
y tengo el siguiente objeto de vista que estoy tratando de poblar ....
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;
}
Un proyecto puede tener 0 o mensajes en él. Mi objetivo aquí es pasar una lista de objetos UserProject a mi vista MVC, cada objeto UserProject puede tener una colección de mensajes. El error que consigo es el siguiente
error argumento de 1 Instancia: no se puede convertir de '
System.Linq.IQueryable<AnonymousType#1>
' a 'System.Collections.Generic.IEnumerable<Riebro.Services.UserProject>
'Error 2 '
System.Linq.IQueryable<AnonymousType#1>
' no contiene una definición para 'ToList
' y la mejor extensión sobrecarga del método 'System.Linq.Enumerable.ToList<TSource>(System.Collections.Generic.IEnumerable<TSource>)
' tiene algunos argumentos no válidos
Actualmente la entidad mensajes no tiene una propiedad de navegación a Proyectos ... debería ... voy a añadir que el cambio más tarde ... pero por el momento yo sólo Necesito ke ep en el trabajo.
EDITAR
Tal como está ahora la consulta LINQ se parece a esto ...
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>();
y la clase de vista se parece a esto ...
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;
}
y yo estoy ahora Obteniendo el siguiente error ...
Error 1 C annot convierte implícitamente el tipo '
System.Collections.Generic.IEnumerable<Riebro.Message>
' en 'System.Collections.Generic.List<Riebro.Message>
'. Existe una conversión explícita (¿falta un molde?)
+1 además, el constructor 'UserProject()', que inicializa 'Messages', debe hacerse público, de lo contrario no será accesible. –
Gracias ... eso funciona inicialmente ... pero ahora estoy atascado con ... Error No se puede convertir implícitamente el tipo 'System.Collections.Generic.IEnumerable' a 'System.Collections.Generic. Lista '. Existe una conversión explícita (¿falta un molde?) –
Use ToList() al final de su consulta –