Skip to main content
 首页 » 编程设计

c#之在 C# Linq 中同时选择父子集合到某个模型的列表

2024年01月31日26落叶无声

类(class)老板有代表他/她下属员工名单的子类(class)集合人。

My Requirement is to get the list of persons List<Person> Members from the object John using LINQ Statement.

public class Person 
{ 
    public string Name { get; set; } 
    public string Department { get; set; } 
    public string Gender { get; set; } 
} 
 
public class Boss 
{ 
    public string Name { get; set; } 
    public string Department { get; set; } 
    public string Gender { get; set; } 
    public List<Person> Employees { get; set; } 
} 
 
Boss John = new Boss() 
{ 
    Name = "Harry", 
    Department = "Development", 
    Gender = "Male", 
    Employees = new List<Person>() 
        { 
            new Person() {Name = "Peter", Department = "Development",Gender = "Male"}, 
            new Person() {Name = "Emma Watson", Department = "Development",Gender = "Female"}, 
 
        } 
} 

我需要的集合应该是

List<Person> Members = new List<Person>() 
    { 
        new Person() {Name = "Harry", Department = "Development",Gender = "Male"}, 
        new Person() {Name = "Peter", Department = "Development",Gender = "Male"}, 
        new Person() {Name = "Emma Watson", Department = "Development",Gender = "Female"}, 
    } 

如何从对象中获取列表成员John 使用 LINQ 语句。请帮助我。

也请为提供解决方案Distinct List<Person> Members 来自 List<Boss> 使用 LINQ 语句。

请您参考如下方法:

你可以简单地这样做:

var list = John.Employees.ToList(); 
 
list.Insert(0, 
    new Person 
    { 
        Name = John.Name, 
        Department =  John.Department, 
        Gender = John.Gender 
    }); 

如果你有一个 List<Boss> ,那么你可以这样做:

var result = list 
    .SelectMany(x => 
        new [] { new Person { Name = x.Name, Department = x.Department, Gender = x.Gender, EmpID = x.EmpID }} 
        .Concat(x.Employees)) 
    .GroupBy(x => x.EmpID) //Group by employee ID 
    .Select(g => g.First()) //And select a single instance for each unique employee 
    .ToList();