0

我有一个项目集合,其中有一个名为 index 的属性。我想以某种方式设置此属性(索引++)。我怎样才能通过 LINQ 做到这一点(不使用每个)。下面是我正在生成集合的语句。

new ObservableCollection<EventSchedules>(
    EventsList.Where(v => v.EventStartDate.Date.Equals(selectedDay.Date)));
4

2 回答 2

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;
于 2013-09-25T10:21:00.553 回答
1

Linq 的关键租户之一(它实际上是函数式编程的关键租户)是数据应该是不可变的 - 或至少尽可能不可

在这种情况下 - 正确的“linq like”做事方式是投影到具有更新值的新对象 - 而不是设置值。

这种事情最好用命令式代码来完成——即for循环。

于 2013-09-25T10:20:45.880 回答