2009-05-31 1 views
0

Я хочу объединить два списка разных типов в один список нового типа. Я хотел бы использовать соединение, но если, например, список A, оленья кожа имеет значение для этого общего имущества, я все еще хочу, чтобы использовать значения для списка Б.Как слить два списка запросов linq другого типа в список нового типа?

class A{ 
decimal AValue 
DateTime Date 
int UserID 
} 

class B{ 
int BValue 
DateTime Date 
int UserID 
} 

class Merge{ 
decimal? Avalue 
int? BValue 
DateTime Date 
int UserID 

} 

ответ

0

Если я правильно понимаю, это должно сделать это. Как есть 2 даты на выбор, я выбрал один из blist.

Предполагая креном, как IEnumerable < > и Blist, как IEnumerable < В >

EDIT: Предыдущий ответ присоединился неправильный путь, позволяющий аннулирует для B части соединения. Я обновил код, чтобы нулевые А сек вместо

blist 
    .GroupJoin 
    (
     alist, 
     tb => tb.UserID, 
     ta => ta.UserID, 
     (tb, ta) => new {tb, ta} 
    ) 
    .SelectMany 
    (
     j => j.ta.DefaultIfEmpty(), 
     (j, x) => 
     new Merge 
      { 
       AValue = x.AValue, 
       BValue = j.tb.BValue, 
       Date = j.tb.Date, 
       UserID = j.tb.UserID 
      } 
    ); 
+0

Blist всегда одинакова. – zsharp

+0

так ли есть предметы в alist, у которых нет соответствующего элемента в blist? это полное внешнее соединение, а не только левое внешнее соединение? – spender

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