【发布时间】:2014-07-02 20:40:11
【问题描述】:
我正在使用 Code First 实体框架。
我正在使用以下简单的类:
public class Users
{
public ICollection<Projects> Projects{get;set;}
}
public class Projects
{
public ICollection<Users> Users{get;set;}
}
我正在使用 linq 进行数据检索。执行以下查询时:(注意lstProjects 是List<Project>)
var lstUsers = (from users in lstProjects
where users.ProjectId == pId
select users.Users).ToList();
我有一个List<Users> 对象并想用项目填充此列表。喜欢,
var lstUsersToDisplay = new List<Users>();
lstUsersToDisplay = (List<Users>)lstUsers; //This can't be cast.
将ICollection<T> 转换为List<T> 的方法是什么?
其次,我有List<Users> 并想将其转换为ICollection<Users> 如何实现?
已编辑:
情景,更清楚的是
所有Projects 都加载到lstProjects 中,我们需要选择映射到特定项目的Users。这些用户也包含在Projects 中作为集合。每个Project 都有它的Users collection,就像我分解 lstProjects 一样:
lstProjects --> [0]-->//other Properties
ICollection[Users]-->[0]//Contains User class Properties
[1]....
[1] ... same procedure
希望它清除场景
【问题讨论】:
-
什么是
lstProjects?如果是List<Project>,那么您实际上得到了List<Project>作为lstUsers,尽管您的名字。如果在 Visual Studio 中将鼠标悬停在var lstUsers的var上,它会显示什么?错误信息是什么?如果您展示一个简短但完整的程序来演示该问题,那将真的有所帮助。 (另外,你为什么要创建一个空列表然后忽略它?为什么不直接使用var lstUsersToDisplay = lstUsers;?) -
@JonSkeet 我在键入时表示歉意,基本上我正在从项目列表中检索用户集合。我已经修改了
-
所以您的
users范围变量实际上是Project?神圣的混乱命名,蝙蝠侠!听起来您现在有了List<ICollection<Users>>。同样,您应该将鼠标悬停在var上以查看您实际拥有的内容...
标签: c# linq entity-framework linq-to-entities icollection