2015-11-27 24 views
0

我有兩個不同的項目列表,如員工和部門,都有多對多的關係。是否可以將行轉換爲C#.net中的列並列出數據?

員工:

 
EmpID  EmpName 
1   emp1 
2   emp2 
3   emp3 

部門:

 
DeptID DeptName 
1  dept1  
2  dept2  
3  dept3  
 
Relation Table 
relationID empID DeptID 
1   1  1 
2   1  2 
3   2  3 
4   3  1 
5   3  3 

而且我的要求:和部門是不固定的

 
empID Name   Dept1  Dept2 Dept3 
1  emp1   yes  yes  No 
2  emp2   no  no  yes 
3  emp3   yes  no  yes 

是否有可能做的,如果有,請點亮我的感謝。如果您有部門的大名單,你可以做到這一點

 
Json data will be, emplist: [{"empID": "1", "name": "emp1", "Dept1": "yes", "dept2": "yes", "Dept3": "yes"}, {"empID": "2", "name": "emp2", "Dept1": "no", "dept2": "no", "Dept3": "yes"}, {"empID": "3", "name": "emp3", "Dept1": "yes", "dept2": "no", "Dept3": "yes"}]; 

感謝提前:)

+0

你需要一個SQL語句以表格格式輸出數據? – Utsav

+0

嘿Utsav,假設我有員工名單和部門名單w.r.t給員工,我希望這兩個名單在一個名單中作爲父母名單,部門名單在父母名單中作爲一個行。有可能嗎? – khemt

回答

1

試試這個LINQ

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 


namespace ConsoleApplication58 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DataTable employeesTable = new DataTable(); 
      employeesTable.Columns.Add("EmpID", typeof(int)); 
      employeesTable.Columns.Add("EmpName", typeof(string)); 
      employeesTable.Rows.Add(new object[] {1, "emp1"}); 
      employeesTable.Rows.Add(new object[] {2, "emp2"}); 
      employeesTable.Rows.Add(new object[] {3, "emp3"}); 

      DataTable departmentTable = new DataTable(); 
      departmentTable.Columns.Add("DeptID", typeof(int)); 
      departmentTable.Columns.Add("DeptName", typeof(string)); 
      departmentTable.Rows.Add(new object[] {1, "dept1"}); 
      departmentTable.Rows.Add(new object[] {2, "dept2"}); 
      departmentTable.Rows.Add(new object[] {3, "dept3"}); 


      DataTable relationTable = new DataTable(); 
      relationTable.Columns.Add("RelationID", typeof(int)); 
      relationTable.Columns.Add("EmpID", typeof(int)); 
      relationTable.Columns.Add("DeptID", typeof(int)); 
      relationTable.Rows.Add(new object[] {1, 1, 1}); 
      relationTable.Rows.Add(new object[] {2, 1, 2}); 
      relationTable.Rows.Add(new object[] {3, 2, 3}); 
      relationTable.Rows.Add(new object[] {4, 3, 1}); 
      relationTable.Rows.Add(new object[] {5, 3, 3}); 

      var joinTables = 
       (from r in relationTable.AsEnumerable() 
       join e in employeesTable.AsEnumerable() on r.Field<int>("EmpID") equals e.Field<int>("EmpID") 
       join d in departmentTable.AsEnumerable() on r.Field<int>("DeptID") equals d.Field<int>("DeptID") 
       select new { 
        relationID = r.Field<int>("RelationID"), 
        employeeID = e.Field<int>("EmpID"), 
        employeeName = e.Field<string>("EmpName"), 
        department = d.Field<string>("DeptName") 
       }) 
       .ToList(); 

      var results = joinTables.GroupBy(x => x.employeeID).Select(y => new { 
       employee = new { 
        empID = y.FirstOrDefault().employeeID, 
        empName = y.FirstOrDefault().employeeName, 
        Dept1 = y.Where(z => z.department == "dept1").Any() ? "yes" : "no", 
        Dept2 = y.Where(z => z.department == "dept2").Any() ? "yes" : "no", 
        Dept3 = y.Where(z => z.department == "dept3").Any() ? "yes" : "no" 
       } 
      }).ToList(); 
     } 
    } 
} 

代替

  List<string> departments = departmentTable.AsEnumerable().Select(x => x.Field<string>("DeptName")).Distinct().OrderBy(y => y).ToList(); 

      var results = joinTables.GroupBy(x => x.employeeID).Select(y => new { 
       employee = new { 
        empID = y.FirstOrDefault().employeeID, 
        empName = y.FirstOrDefault().employeeName, 
        departments = departments.Select(d => y.Where(z => z.department == d).Any() ? d + ": yes" : d + ": no").ToList() 
       } 
      }).ToList(); 
+0

謝謝jdweng的回答:),我以不同的方式接近,但答案是正確的。如接受答案。 – khemt

相關問題