объединяя два набора в LINQ - PullRequest
1 голос
/ 19 мая 2010
    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" }

Это будет результирующий набор, который сообщит мне со свойством name NAME, из которого он был взят, если SSN найден в SetA и SetB, у него будет свойство NAME = "setB"

Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

4 голосов
/ 19 мая 2010

Кажется, вы хотите внешнее соединение - это делается с помощью GroupJoin:

var set = setsA.GroupJoin(
    setsB,
    sa => sa.SsnA,
    sb => sb.SsnB,
    (a, bs) => new { SSN = a.SsnA, NAME = bs.Any() ? "setB" : "setA" });
0 голосов
/ 19 мая 2010

Способ LINQ, описанный здесь: http://msdn.microsoft.com/en-us/library/bb397895.aspx будет выглядеть так (функционально аналогично лямбда-выражению):

 var set = from a in setsA
           join b in setsB on a.SsnA equals b.SsnB into g
           from o in g.DefaultIfEmpty()
           select new { SSN = a.SsnA, NAME = (o != null ? o.name : a.name)};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...