通过LINQ设置类索引属性

时间:2013-09-25 10:16:47

标签: c# linq

我有一个项目的集合,其中我有一个名为index的属性。我想在某些模式中设置此属性(index ++)。我怎么能通过LINQ(不使用每个)来做到这一点。下面是我正在生成集合的声明。

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

2 个答案:

答案 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循环。