如何使用多列联接查询2个列表

时间:2019-05-03 12:18:13

标签: c# linq

我的C#代码中有2个列表。

第一个列表具有以下结构

List<ObjectA>

ObjectA是以下结构的类

public class ObjectA
{
    public string ID { get; set; }
    public string EId1 { get; set; }
    public string EId2 { get; set; }
    public string EId3 { get; set; }
    public string EId4 { get; set; }
}

第二个列表具有以下结构

 List<ObjectB>

其中ObjectB是以下结构的类

public class objectB
{
    public string ID{get;set;}
    public string Name{get;set;}
}

我可以使用以下查询在单个列上进行联接

var finalList= from objA in objectAList
               join objB in objectBList
               on objA.EId1 equals objB.ID
               select new
               {
                    Id = objA.ID,
                    EId = objB.Id,
                    Name = objB.Name    
               };

这很好。但是我需要检查第二个列表中的Id是否匹配第一个列表中的4列(Eid1,Eid2,Eid3,Eid4)中的任何一个。我该怎么办?

2 个答案:

答案 0 :(得分:3)

您的意思是这样吗? :

       var finalList= from objA in objectAList
                      from objB in objectBList
                      where objA.EId1 == objB.Id 
                       || objA.EId2 == objB.Id 
                       || objA.EId3 == objB.Id 
                       || objA.EId4 == objB.Id 
                       select new
                       {
                             Id = objA.ID,
                             EId = objB.Id,
                             Name = objB.Name    
                       };

答案 1 :(得分:1)

var finalList = 
    from objA in listA
    join objB in listB
    on objA.EId1 equals objB.ID
    where new string[] { objB.ID, objA.EId2, objA.EId3, objA.EId4 }.Contains(objA.ID)
    select new { Id = objA.ID, EId = objB.ID, Name = objB.Name };

这就是您要寻找的。但是,我认为您设计的对象并不是以最佳方式设计的。如果您有任何控制权,我会