LINQ查询匿名类型不能转换到POCO对象
问题描述:
我有以下LINQ查询...LINQ查询匿名类型不能转换到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>();
}
,我有我试图填充以下视图对象....
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>)
”有一些无效参数
目前的信息实体不具有导航属性项目......应该......我会在稍后补充说,变革......但此刻我只需要ke ep在工作。
编辑
目前的情况是,现在的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 C注释隐式地将类型'
System.Collections.Generic.IEnumerable<Riebro.Message>
'转换为'System.Collections.Generic.List<Riebro.Message>
'。存在明确的转换(您是否缺少演员?)
答
您应该在select语句中创建UserProject实例而不是匿名对象。
select new UserProject
{
ProjectId = pcup.ProjectId,
UserID = pcup.UserId,
ProjectName = pcup.ProjectName,
ProjectDescription = pcup.ProjectDescription,
Messages = pm
}
+1此外,初始化Messages的'UserProject()'构造函数应该公开,否则它将无法访问。 – 2012-02-19 21:37:04
谢谢......最初的工作......但我现在坚持......错误不能隐式地将类型'System.Collections.Generic.IEnumerable'转换为'System.Collections.Generic。列表”。存在明确的转换(您是否缺少演员?) –
2012-02-19 23:31:25
在查询结尾处使用ToList() – 2012-02-20 06:44:16