2015-05-15 6 views
0

У меня есть две коллекции, и я хочу присоединиться к ним на основе атрибута ключа и присвоить значения одной коллекции другим. Я делаю это следующим образом:Объединение коллекций и присвоение значений

var joinedData = from collection_one in Office.Employees 
       join collection_two in NewOffice.Employees 
        on collection_1.OfficeId equals collection_two.OfficeId 
       select new { collection_one, collection_two}; 


// Declare a new Collection 

ICollection<Office.Employees> updatedCollection = New List<Office.Employees>(); 

// Assign New Collection_Two Values to Collection_One 
foreach (var item in joinedData.ToList()) 
      { 
       item.collection_one.Deleted = item.collection_two.Deleted; 
       updatedCollection .Add(item.obp); 
      } 

Это результат не дает правильного результата. My Join производит больше записей, чем нужно для внутреннего соединения. Может ли кто-нибудь выявить проблему?

+0

Ваш запрос выглядит хорошо для меня. Можете ли вы поделиться некоторыми примерами данных? –

ответ

1

Попробуйте LEFT JOIN с помощью DefaultIfEmpty():

var updatedCollection = 
     (from collection_one in Office.Employees 
     from collection_two in NewOffice.Employees.Where(x => x.OfficeId == collection_one.OfficeId).DefaultIfEmpty() 
     where collection_two == null 
     select new { 
      collection_one, 
      collection_two 
     }).Select(x => { 
      x.collection_one.Deleted = x.collection_two.Deleted; 
      return x.obp; 
     }); 

Но что x.obp? Может быть, результат должен быть x.collection_one?

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