【问题标题】:C# - List<> link id to nameC# - List<> 将 id 链接到名称
【发布时间】:2016-10-28 05:39:22
【问题描述】:

我得到了这个从数据库中读取员工数据的应用程序,唯一的问题是员工的老板是在employee_id中设置的,而不是在名称中,这就是我要找的。​​p>

我得到了一个包含所有员工的列表。所以我正在寻找一种方法来通过列表使用 LINQ 查询它,以将employee_id 链接到名字/姓氏。

示例:ID 为 1 的员工是 Nancy,她的老板是 Andrew,但没有说 Andrew,而是说 2。但应该说 Andrew

我还在下面添加了 2 张图片以添加到我的解释中。

Listview of the employees

Reading out the list of employees into the ListView

【问题讨论】:

  • 在此处复制粘贴您的代码。不要链接到图片。
  • 这个名字真的只需要显示在那个列表中吗?
  • @Steve 是的,没错

标签: c# sql winforms linq listview


【解决方案1】:

所以你需要左加入 IDBoss 并获取老板信息(如果找到):

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; }
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      相关资源
      最近更新 更多