【问题标题】:C# - List<> link id to nameC# - List<> 将 id 链接到名称
【发布时间】:2016-10-28 05:39:22
【问题描述】:
【问题讨论】:
标签:
c#
sql
winforms
linq
listview
【解决方案1】:
所以你需要左加入 ID 和Boss 并获取老板信息(如果找到):
var employees = Database.getEmployees();
var employeesWithBoss = (from e in employees
join b in employees
on e.ID equals b.Boss into leftJoin
from boss in leftJoin.DefaultIfEmpty()
select new
{
Employee = e,
BossFirstName = boss == null ? null : boss.FirstName,
BossLastName = boss == null ? null : boss.LastName
}).ToList();
foreach (var employee in employeesWithBoss)
{
// do your normal work here, you now
// have employee.BossFirstName and employee.BossLastName
}
【解决方案2】:
首先,将员工加载到某个局部变量中(稍后您将需要它):
List<Employee> employees = Database.getEmployees();
然后编辑你的 foreach 循环:
// 'employee' is better because here it is really just one specific employee
foreach (Employee employee in employees)
现在你可以像这样得到老板的名字(在foreach循环中):
string boss = employees.FirstOrDefault(x => x.ID == employee.ReportsTo)?.FirstName;
(? 运算符至少需要 C# 6.0。)
【解决方案3】:
您可以使用 lambda 来实现。
class Program
{
static void Main(string[] args)
{
List<Employee> employees = new List<Employee>();
employees.Add(new Employee() { EmployeeName = "Nancy", EmployeeId = 1, BossId = 2 });
employees.Add(new Employee() { EmployeeName = "Andrew", EmployeeId = 2, BossId = 0 });
employees.Add(new Employee() { EmployeeName = "Janet", EmployeeId = 1, BossId = 2 });
var employeesWithBossName = employees.Join(employees,
emp1 => emp1.BossId,
emp2 => emp2.EmployeeId,
(emp1, emp2) => new { EmployeeName = emp1.EmployeeName, BossName = emp2.EmployeeName });
foreach (var item in employeesWithBossName)
{
Console.WriteLine("{0} {1}", item.EmployeeName, item.BossName);
}
Console.Read();
}
}
public class Employee
{
public int EmployeeId { get; set; }
public string EmployeeName { get; set; }
public int BossId { get; set; }
}
希望这会有所帮助。