我有一个项目的集合,其中我有一个名为index的属性。我想在某些模式中设置此属性(index ++)。我怎么能通过LINQ(不使用每个)来做到这一点。下面是我正在生成集合的声明。
new ObservableCollection<EventSchedules>(
EventsList.Where(v => v.EventStartDate.Date.Equals(selectedDay.Date)));
答案 0 :(得分:3)
阱,
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;
答案 1 :(得分:1)
Linq的一个主要租户(实际上是函数式编程的关键租户)是数据应该是不可变的 - 或者至少是不可变的 。
在这种情况下 - 正确的“linq like”做事方式,就是将投射到具有更新值的新对象中 - 而不是设置值。
这种事情最好用命令式代码完成 - 即for循环。