Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq C#列表与条件不同_Linq_C# 4.0 - Fatal编程技术网

Linq C#列表与条件不同

Linq C#列表与条件不同,linq,c#-4.0,Linq,C# 4.0,我偶然发现了一个场景,我必须将一个w.r.t分组到多个列中。我能解决它,但后来麻烦来了。仅当分组键满足条件时,才应将行分组 我介绍了一个示例场景,以显示不同项目的员工角色 public class EmployeeRoleDept { public int RoleId { get; set; } public string RoleName { get; set; } public int DeptartmentId { get; set; } public s

我偶然发现了一个场景,我必须将一个w.r.t分组到多个列中。我能解决它,但后来麻烦来了。仅当分组键满足条件时,才应将行分组

我介绍了一个示例场景,以显示不同项目的员工角色

public class EmployeeRoleDept
{
    public int RoleId { get; set; }
    public string RoleName { get; set; }
    public int DeptartmentId { get; set; }
    public string DeptartmentName { get; set; }
    public int ProjectId { get; set; }
    public string ProjectName { get; set; }
}

var listEmployee = new List<EmployeeRoleDept>
{
    new EmployeeRoleDept{ RoleId = 1 ,RoleName="CEO",DeptartmentId = 1 , DeptartmentName = string.Empty, ProjectId = 1,ProjectName=string.Empty},
    new EmployeeRoleDept{ RoleId = 2, RoleName="PM", DeptartmentId = 2, DeptartmentName = "Dept A", ProjectId = 2,ProjectName="Project 2"},
    new EmployeeRoleDept{ RoleId = 2, RoleName="PM", DeptartmentId = 2 ,DeptartmentName = "Dept A", ProjectId = 3,ProjectName="Project 3"},
    new EmployeeRoleDept{ RoleId = 2, RoleName="PM", DeptartmentId = 3, DeptartmentName = "Dept B", ProjectId = 4,ProjectName="Project 4"},
    new EmployeeRoleDept{ RoleId = 2, RoleName="PM", DeptartmentId = 3 ,DeptartmentName = "Dept B", ProjectId = 5,ProjectName="Project 5"},
    new EmployeeRoleDept{ RoleId = 3, RoleName="Dev",DeptartmentId = 4 ,DeptartmentName = "Dept C", ProjectId = 6,ProjectName="Project 6"},
    new EmployeeRoleDept{ RoleId = 3, RoleName="Dev",DeptartmentId = 4 ,DeptartmentName = "Dept C", ProjectId = 7,ProjectName="Project 7"},
    new EmployeeRoleDept{ RoleId = 3, RoleName="Dev",DeptartmentId = 5 ,DeptartmentName = "Dept D", ProjectId = 8,ProjectName="Project 8"},
    new EmployeeRoleDept{ RoleId = 4, RoleName="Tester",DeptartmentId = 4,DeptartmentName = "Dept C" , ProjectId = 6,ProjectName="Project 6"},
    new EmployeeRoleDept{ RoleId = 4, RoleName="Tester",DeptartmentId = 6,DeptartmentName = "Dept E" , ProjectId = 9,ProjectName="Project 9"},
};
如果该员工是某个部门的项目经理(PM),他将是该部门所有项目的PM。因此,项目名称不需要显示在网格中。 所以我想我们必须把它归为RoleId的w.r.t,如果他是首相的话

我试着把他们和RoleId一起分组

var grouplist = listEmployee.GroupBy(x => x.RoleId==2).ToList();

但是我只得到一个组,其中只有一个PM角色,其余的角色在第二个组中。

GroupBy方法使用一个函数,该函数向GroupBy返回一个值。因为返回的是布尔表达式,所以将数据分为两组:
true
RoleId==2
)和
false
(其他所有人)

您可能不需要在此处进行分组。这会给你你想要的数据

var summarizedList = listEmployee
                         .Select(e => new {
                                RoleName = e.RoleName,
                                DeptName = e.DeptartmentName,
                                Project = (e.RoleId == 2 ? string.Empty : e.ProjectName)
                         })
                         .Distinct()
                         .ToList();

我不明白你的样本结果。为什么项目经理是空白的?作为一个部门的项目经理,他将是该部门所有项目的项目经理。因此,项目名称不需要显示在网格中。哦,是的!!我们不需要把它分组。。。呸!!在我的脑海里,有一个团体应该被申请,而我没有想到其他任何事情。。。。谢谢你,伙计。。
var summarizedList = listEmployee
                         .Select(e => new {
                                RoleName = e.RoleName,
                                DeptName = e.DeptartmentName,
                                Project = (e.RoleId == 2 ? string.Empty : e.ProjectName)
                         })
                         .Distinct()
                         .ToList();