Linq从ICollection <T>转换为List <T>

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;}
}
Run Code Online (Sandbox Code Playgroud)

我正在使用linq进行数据检索.执行以下查询时:(注意lstProjectsList<Project>)

var lstUsers = (from users in lstProjects
                where users.ProjectId == pId
                select users.Users).ToList();
Run Code Online (Sandbox Code Playgroud)

我有一个List<Users>对象,并希望用项目填充此列表.喜欢,

var lstUsersToDisplay = new List<Users>();
lstUsersToDisplay = (List<Users>)lstUsers; //This can't be cast.
Run Code Online (Sandbox Code Playgroud)

什么是转换的方式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

希望它能清除这种情况

Jon*_*eet 5

如果您的查询真的如此:

var lstUsers = (from users in lstProjects
                where users.ProjectId == pId
                select users.Users).ToList();
Run Code Online (Sandbox Code Playgroud)

那相当于:

List<ICollection<Users>> lstUsers = (from users in lstProjects
                                     where users.ProjectId == pId
                                     select users.Users).ToList();
Run Code Online (Sandbox Code Playgroud)

如果您正在尝试从单个项目中获取使用列表,我会将其写为:

var lstUsers = lstProjects.Single(project => project.ProjectId == pId)
                          .Users
                          .ToList();
Run Code Online (Sandbox Code Playgroud)

如果可能有多个相同的项目ProjectId,您希望展平用户.例如:

var lstUsers = lstProjects.Where(project => project.ProjectId == pId)
                          .SelectMany(project => project.Users)
                          .ToList();
Run Code Online (Sandbox Code Playgroud)

或者在查询表达式语法中:

var lstUsers = (from project in lstProjects
                where project.ProjectId == pId
                from user in project.Users
                select user).ToList();
Run Code Online (Sandbox Code Playgroud)

请注意我的范围变量被调用的事实project,因为它引用的是项目,而不是用户.命名很重要 - 注意它.我还要重命名ProjectsUsers类型,只是ProjectUser,假设每个实际上仅仅是旨在代表一个单一的实体.