2014-09-30 72 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 
     }; 

这将确保创建的匿名对象不具有两个属性名称相同