2013-04-07 115 views
0

我有不同的數據表的數據庫,我用各種SQL查詢來提取如下: -C#中存儲數據庫錶行

表1

 
ID, Surname, Title, Department 

1, Jones,  Mr, 20 

1, Jones,  Mr, 21 

一個人可以是多個部門的成員。因此,我所做的SQL查詢會生成同一個人(相同ID)的多行,但具有不同的部門ID。這些信息存儲在一個列表中。

我可以在DataGridView對象中沒有問題地顯示這些信息。

我也有另外一個名單部門,這是我通過一個SQL查詢填充: -

 
ID, Name 

20, Accounts 

21, Admin 

我所試圖實現的是這兩個列表,以便結合我最終的東西,如: -

 
ID, Surname, Title, Department 

1, Jones,  Mr, Accounts, Admin 

因此,新的第三個列表包含每個人只有一行ID,但該行包含部門名稱而不是部門ID,該行還包含該人員所屬的所有部門。

+0

所以,你的第一個列表是一樣的東西'名單'和你的第二個是'名單' ? – ethorn10 2013-04-07 19:05:40

+0

當他們將減少網絡流量時,通常需要在RDBMS中進行連接,如通過減少傳輸的數據量和執行的查詢數量。 RDBMS更適合優化連接(一般情況下)。 – 2013-04-07 19:13:12

回答

2

我建議在SQL中進行連接,因爲它會更高效 - 這就是DataBase設計的目的!

但是,如果你真的想要你可以使用LINQ to Objects。我假設你有兩個列表:

var people = new List<Person>(); 
var departments = new List<Department>(); 

兩個PersonDepartment有你寫的有關屬性。

您的疑問:

var query= from p in people 
      join d in departments on p.Department equals d.ID 
      group d by new { p.ID, p.Surname, p.Title } into g 
      select new { 
       g.Key.ID, 
       g.Key.Surname, 
       g.Key.Title, 
       Departments = String.Join(", ", g.Select(d => d.Name)) 
      }; 

並獲得從查詢結果匿名類型的List

var result = query.ToList();