2016-06-25 12 views
0

私はデータベースから従業員のデータを読み取るこのアプリケーションを持っていますが、従業員の上司はemployee_idに設定されています。C# - List <>リンクIDの名前

私はすべての従業員でいっぱいのリストを得ました。だから私はリストを介してLINQでそれを検索する方法を探しています。これは、employee_idをFirstname/Lastnameにリンクします。

例:ID 1を持つ従業員がナンシーで、彼女の上司はアンドリューですが、私も追加するには、以下の2枚の画像を追加し、それが2言うアンドリューは言っていません。しかし、それはアンドリューに

を言う必要があります私の説明に。

Listview of the employees

Reading out the list of employees into the ListView

+2

ここにコードをコピーして貼り付けてください。画像にリンクしないでください。 –

+0

名前は本当にそのリストの表示にのみ必要ですか? – Steve

+0

@Steveはい、それは正しいです – iub3rskillz

答えて

1

まず、(いくつかのローカル変数に従業員を読​​み込みます後で必要になります):

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が必要演算子。)

+0

これは、私が意味していたものと同じ、速くてクリーンなソリューションです。 – iub3rskillz

1

だから、左に必要BossIDに参加し、見つかった場合はボスの情報を取得する:

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

これを達成するためにラムダを使用することができます。

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

希望すると、これが役に立ちます。

関連する問題