2015-06-23 2 views
0

У меня есть коллекция IEnumerable, называемая allEventsDetails и свойства коллекции - это цифра, имя и статус.Группировка с linq для обновления коллекции

Мне нужно обновить ту же коллекцию, если два или более значения Значения равны.

var categories = from p in allEventsDetails 
        group p by p.Digit into g 
        where g.Count() > 1 
        select g.Select(s => s.status = "true"); 

Как я могу использовать linq для этого?

+1

linkq обычно используется для извлечения данных ... обновление невозможно с помощью LINQ ... только возможный способ обновления данных через запрос linq осуществляется с помощью метода расширения. – CPR43

+0

LINQ - это язык запросов, он не делает никаких модификаций. Модификации выполняются с помощью ORM, который вы используете, и являются конкретными для него. Какой ORM вы используете? Если вы используете коллекцию in-memory, с другой стороны, просто измените свойство –

ответ

0

вы могли бы сделать что-то вроде этого:

(from x in allEventsDetails 
    group x by x.Digit into y 
    where y.Count()>1 
    select y).SelectMany(z=>z).ToList().ForEach(x=>x.Status="true"); 

Что вы могли бы также сделать:

var temp= (from x in allEventsDetails 
    group x by x.Digit into y 
    where y.Count()>1 
    select y).SelectMany(z=>z); 

    foreach (var x in temp) 
    { 
    x.Status= "test"; 
    } 

Таким образом, вы не должны создать «временный» список.

+0

'ForEach' - это метод в' List', а не в LINQ. Однако нет необходимости создавать временный список, просто перебирайте результат и устанавливайте статус. –

+0

Да, вы могли бы. Просто обновление в одной «партии». Ну, LINQ - это просто синтаксический сахар поверх C#, и компиляторы позже переводит его в ряд методов расширения в Enumerable/Querable в любом случае. – ANewGuyInTown

+0

@PanagiotisKanavos не могли бы вы объяснить немного больше ... – Aruns

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