如何使用 LINQ 和包含更新匿名对象属性

本文关键字:对象 属性 更新 包含 何使用 LINQ | 更新日期: 2023-09-27 18:36:59

我有两个匿名对象列表,如下所示

 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
                    }
                }

这不起作用,coz 编译器抱怨我无法设置匿名类型的只读属性"Year"。

LINQ 中

是否有更简单/更好的方法可以基于一个 LINQ 语句中的另一个匿名列表更新人员列表?

如何使用 LINQ 和包含更新匿名对象属性

您可以进一步执行选择:

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; };