Has*_*aan 2 c# linq linq-to-entities entity-framework icollection
我正在使用Code First Entity Framework.
我使用以下简单类:
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集合中.如果我分解了lstProjects,那么每个Project都有它的Users collection样子:
lstProjects --> [0]-->//other Properties
                      ICollection[Users]-->[0]//Contains User class Properties
                                           [1]....
                [1] ... same procedure
希望它能清除这种情况
如果您的查询真的如此:
var lstUsers = (from users in lstProjects
                where users.ProjectId == pId
                select users.Users).ToList();
那相当于:
List<ICollection<Users>> lstUsers = (from users in lstProjects
                                     where users.ProjectId == pId
                                     select users.Users).ToList();
如果您正在尝试从单个项目中获取使用列表,我会将其写为:
var lstUsers = lstProjects.Single(project => project.ProjectId == pId)
                          .Users
                          .ToList();
如果可能有多个相同的项目ProjectId,您希望展平用户.例如:
var lstUsers = lstProjects.Where(project => project.ProjectId == pId)
                          .SelectMany(project => project.Users)
                          .ToList();
或者在查询表达式语法中:
var lstUsers = (from project in lstProjects
                where project.ProjectId == pId
                from user in project.Users
                select user).ToList();
请注意我的范围变量被调用的事实project,因为它引用的是项目,而不是用户.命名很重要 - 注意它.我还要重命名Projects和Users类型,只是Project和User,假设每个实际上仅仅是旨在代表一个单一的实体.