2015-06-08 2 views
0

У меня есть 2 коллекции клиентов:Слияние 2 коллекции и изменить свойство одних и тех же объектов

  1. перечисляют все клиенты
  2. связанные список клиентов

Весь список клиентов имеет все клиенты. Связанный список клиентов содержит несколько клиентов из списка «всех клиентов»

Я хочу вернуть 3-ю коллекцию, называемую mergedCustomers, где я могу выполнить функцию/логику для создания нового класса «MergeCustomer», где Id всех элементов коллекции равны, и для тех, которые я установил на новом mergeCustomer свойство IsSelected = true.

Моя 3-я коллекция должна, конечно же, вернуть всех клиентов, я просто хочу, чтобы свойство IsSelected было изменено, когда все клиенты совпадают с соответствующей коллекцией клиентов.

Что это за функция linq?

ответ

1

Самый простой способ:

var mergedCustomers=customers.Select(c=>new MergedCustomer{ 
    Id=c.Id, 
    IsSelected=relatedCustomers.Select(rc=>rc.Id).Contains(c.Id) 
}); 

Соединить путь:

var mergedCustomers=customers.Join(relatedCustomers,c=>c.Id,rc=>rc.Id, 
    (c,g)=> g.Select(rc=>new MergedCustomer { Id=rc.Id,IsSelected=true}) 
    .DefaultIfEmpty(new MergedCustomer {Id=c.Id, IsSelected=false})); 

Другой способ (я думаю, что это должно работать):

var mergedCustomers=customers.Join(relatedCustomers,c=>c.Id,rc=>rc.Id, 
    (c,g)=> new MergedCustomer { Id=rc.Id,IsSelected=g.Any()}); 
+0

"Другой путь" делает стиль метода соединяется, но нет равных проверок, это правильно? Я всегда использую стиль запроса соединения. – Pascal

+0

Он по-прежнему использует метод style join, но поскольку вам все равно, имеет ли группа совпадение или нет, я просто использую '.Any()' для заполнения логического, а не синтаксиса типа DefaultIfEmpty. В этот момент c будет содержать запись клиента, g будет содержать все (если есть) связанные записи клиента, которые соответствуют (на основе c => c.Id == rc => rc.id). Это работает только в запросах типа 1: * ', где все, о чем вы заботитесь, - это если' '' существует или нет, и вы не вытаскиваете ЛЮБЫЕ данные со стороны '*', поэтому это не является обычным явлением. –

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

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