我有一个项目集合,其中有一个名为 index 的属性。我想以某种方式设置此属性(索引++)。我怎样才能通过 LINQ 做到这一点(不使用每个)。下面是我正在生成集合的语句。
new ObservableCollection<EventSchedules>(
EventsList.Where(v => v.EventStartDate.Date.Equals(selectedDay.Date)));
出色地,
someSequenceWithAnIndexProperty.Select((i, item) =>
{
item.Index = i;
return item;
});
但这很弱,因为它不会投射任何东西并将输入更改为副作用,所以相反。
foreach(var pair in someSequenceWithAnIndexProperty
.Select((i, item) => new { Item = item, Index = i }))
{
pair.Item.Index = pair.Index;
}
return someSequenceWithAnIndexProperty;
Linq 的关键租户之一(它实际上是函数式编程的关键租户)是数据应该是不可变的 - 或至少尽可能不可变。
在这种情况下 - 正确的“linq like”做事方式是投影到具有更新值的新对象 - 而不是设置值。
这种事情最好用命令式代码来完成——即for循环。