2010-05-19 2 views
1
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:объединения двух множеств в 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, которое было выбрано, если SSN был найден в SetA и SetB, у него будет свойство NAME = «setB»

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

+1

btw - Я надеюсь, что они НЕ являются реальными номерами SSN ... – Sunny

+2

@ Заключенные - это SSN из будущего, когда потребуется 10 цифр. – juharr

ответ

4

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

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

Путь 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)}; 

 Смежные вопросы

  • Нет связанных вопросов^_^