2015-01-08 3 views
0

У меня есть два анонимных список объектов следующим образомКак обновить анонимные объекты собственности с помощью LINQ и содержит

var persons = people.Select(x => new { Name = x.Name, Year = x.Value }); 

var years = yrs.Select(y => new { OldYear = y.Name, NewYear = y.Value }); 

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

Это, как я сейчас делаю старой школы путь

foreach(var p in persons) 
       { 
        if(years.Any(a => a.OldYear == p.Year)) 
        { 
         p.Year = ages.Single(a => a.OldYear == p.Year).NewYear; --> error 
        } 
       } 

Это не работает, сог компилятор жалуется, что я не могу установить свойство только для чтения «Год» анонимного типа.

Есть ли более простой/лучший способ в LINQ, чтобы обновить список лиц на основе другого анонимного списка в одной инструкции LINQ?

ответ

3

можно выполнить дополнительно Выбрать:

var people = from p in persons 
    let year = ages.Any(a=>a.NewYear==p.Year) ? ages.Single(a => a.OldYear == p.Year).NewYear : p.Year 
    select new { Name = p.Name, Year = year; }; 
+0

Это изменяет данные в оперативной памяти; он не позволяет обновлять данные в базе данных. – Servy

+1

, но при этом выбираются только люди, возраст которых существует в списке возрастов (что btw обновляло Q, чтобы быть названным годами, чтобы быть более понятным). но я также хочу выбрать всех лиц из первоначального списка, возраст которых не содержится в списке возрастов. Ваше заявление фильтрует людей, которые не являются тем, что я хотел. – user330612

+0

Да, извините - обновлено. –

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