如何使用 LINQ 和 Contains 更新匿名对象属性
How to update anonymous objects property using LINQ and Contains
我有两个匿名对象列表如下
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
}
}
这不起作用,因为编译器抱怨我无法设置匿名类型的只读属性 'Year'。
LINQ 中是否有 simpler/better 方法可以在一个 LINQ 语句中根据另一个匿名列表更新人员列表?
您可以进一步执行 Select:
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; };
我有两个匿名对象列表如下
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
}
}
这不起作用,因为编译器抱怨我无法设置匿名类型的只读属性 'Year'。
LINQ 中是否有 simpler/better 方法可以在一个 LINQ 语句中根据另一个匿名列表更新人员列表?
您可以进一步执行 Select:
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; };