Skip to main content
 首页 » 编程设计

c#之在 LINQ 中加入两个集合

2024年02月24日42del

    var setsA = new List<SetA> { 
        new SetA { SsnA = "3450734507", name = "setA"}, 
        new SetA { SsnA = "6833467788", name = "setA"}, 
        new SetA { SsnA = "5452347787", name = "setA"}, 
        new SetA { SsnA = "9345345345", name = "setA"}, 
    }; 
 
    var setsB = new List<SetB> { 
        new SetB { SsnB = "5452347787" ,name = "setB"}, 
        new SetB { SsnB = "9345345345", name = "setB"}, 
    }; 

当我使用这个 linq 时:

var Set = 
                from seta in setsA 
                join setb in setsB 
                 on seta.SsnA 
                    equals setb.SsnB 
                select new {  
                    SSN = seta.SsnA, 
                    NAME = setb.name 
                }; 

我得到这个值:

{ SSN = "5452347787", NAME = "setB" } 
{ SSN = "9345345345", NAME = "setB" } 

但我想要将这两者结合起来的 SET,结果将是:

{ SSN = "3450734507", NAME = "setA" } 
{ SSN = "6833467788", NAME = "setA" } 
{ SSN = "5452347787", NAME = "setB" } 
{ SSN = "9345345345", NAME = "setB" } 

这将是一个结果集,如果在 SetA 和 SetB 中找到 SSN,它将告诉我名称 NAME 属性是从哪个集合中获取的,它将具有属性 NAME = "setB"

有人可以帮我吗?

请您参考如下方法:

您似乎想要一个外部联接 - 这是使用 GroupJoin 完成的:

var set = setsA.GroupJoin( 
    setsB, 
    sa => sa.SsnA, 
    sb => sb.SsnB, 
    (a, bs) => new { SSN = a.SsnA, NAME = bs.Any() ? "setB" : "setA" });