2014-09-30 71 views
-1

我有2個列表。一個叫做Records1,另一個叫做Records2。 Records1有3個帶徽章號碼的字段,Records2有1個帶有徽章號碼的字段。如何返回兩個列表之間的多個連接

我想將Records2徽章字段與Records1中的每個其他徽章字段進行匹配,並在下面的查詢中返回3個名稱。 我認爲查詢是正確的,但我在匿名類型語句中得到了2個錯誤。

我該如何解決?

var query1 = from i in Records1 
     join e in Records2 on i.Responsi equals e.Badge 
     join e1 in Records2 on i.Author equals e1.Badge 
     join e2 in Records2 on i.ByN equals e2.Badge 

     select new 
     { 
      i.Author, 
      i.CompletionDate, 
      i.CompletedBy, 
      i.Responsi, 
      i.Auth, 
      i.ByN, 
      i.IsClose, 
      e.EmployeeName, 
      e.Discipline, 
      e1.EmployeeName, // error: anonymous type cannot have multiple properties with the same name 
      e2.EmployeeName, // error: anonymous type cannot have multiple properties with the same name 
      e.DeptSub 
      }; 
+1

你只需要給這些領域不同的名稱,即:E1Employee = e1.EmployeeName,E2Employee = e2.EmployeeName – 2014-09-30 16:09:32

回答

1

由於您的錯誤意味着,您的匿名對象不能有兩個同名的屬性,你可以這樣做:

var query1 = from i in Records1 
    join e in Records2 on i.Responsi equals e.Badge 
    join e1 in Records2 on i.Author equals e1.Badge 
    join e2 in Records2 on i.ByN equals e2.Badge 

    select new 
    { 
     Author = i.Author, 
     CompletionDate = i.CompletionDate, 
     CompletedBy = i.CompletedBy, 
     Responsi = i.Responsi, 
     Auth = i.Auth, 
     ByN = i.ByN, 
     IsClose = i.IsClose, 
     EmployeeName = e.EmployeeName, 
     Discipline = e.Discipline, 
     EmployeeName2 = e1.EmployeeName, // error: anonymous type cannot have multiple properties with the same name 
     EmployeeName3 = e2.EmployeeName, // error: anonymous type cannot have multiple properties with the same name 
     DeptSub = e.DeptSub 
     }; 

實際上你的匿名類型變成類似於你怎麼能指望一個對象以下工作:

// No worky 
public class Foo 
{ 
    public string Bar; 
    public string Bar; // can't have two properties of same name in class 
} 

鑑於此作品:

public class Foo 
{ 
    public string Bar; 
    public string Bar2; 
} 
2

你可以用下面的方式

select new 
{ 
    Author = i.Author, 
    // Set names for the other properties  
    Name1 = e1.EmployeeName, 
    Name2 = e2.EmployeeName, 
    DeptSub = e.DeptSub 
}; 

在你aprroach你不爲你的匿名類型的屬性,使用的名稱克服這一點。因此,這些名稱是通過您選擇的變量的名稱自動推斷的。因此選擇e.EmployeeName將被分配給名爲EmployeeName的變量。當e1.EmployeeName將被分配一個命名的confict會出現。因此,上述方法是克服這個問題的一個技巧。

0

匿名對象必須具有不同的名稱。所以給他們的名字。

var query1 = from i in Records1 
    join e in Records2 on i.Responsi equals e.Badge 
    join e1 in Records2 on i.Author equals e1.Badge 
    join e2 in Records2 on i.ByN equals e2.Badge 

    select new 
    { 
     i.Author, 
     i.CompletionDate, 
     i.CompletedBy, 
     i.Responsi, 
     i.Auth, 
     i.ByN, 
     i.IsClose, 
     e.EmployeeName, 
     e.Discipline, 
     name1 = e1.EmployeeName, 
     name2 = e2.EmployeeName, 
     e.DeptSub 
     }; 

這將確保創建的匿名對象不具有兩個屬性名稱相同