在linq集合中获取我的Object位置的巧妙方法

Ste*_*eve 3 c# linq

我目前有一个名为Week的对象.一周是Season对象的一部分.这个季节可以包含很多周.我想要做的是找到我周的位置(是本赛季的第一周(所以#1)还是第二周(所以#2).

int i = 0;
        foreach ( var w in Season.Weeks.OrderBy(w => w.WeekStarts)){
            if(w.Id == Id){
                return i;
            }
            i+=1;
        }
Run Code Online (Sandbox Code Playgroud)

目前这就是我所拥有的.我按照开始日期在一秒钟内订购周,以确保它们的顺序正确.然后我循环使用它们直到找到与我目前正在查看的那一周相匹配的那一周.并返回我一直在计算的int ..

我觉得应该有一个更简单的linq方式来做到这一点,因为它感觉非常混乱!

Ani*_*Ani 5

如果您不想编写FindIndex扩展方法或将已排序的项加载到数组/列表中,则可以使用它的重载Select来提供项的索引:

 return Season.Weeks
              .OrderBy(w => w.WeekStarts)
              .Select((week, index) => new { Week = week, Index = index })
              .First(a => a.Week.Id == Id)
              .Index;
Run Code Online (Sandbox Code Playgroud)

如果无法保证指定的Id存在,请FirstOrDefault改用:

var weekIndexTuple = Season.Weeks
                           .OrderBy(w => w.WeekStarts)
                           .Select((week, index) => 
                                    new { Week = week, Index = index })
                           .FirstOrDefault(a => a.Week.Id == Id);

if(weekIndexTuple != null)
{
    return weekIndexTuple.Index;
}
else
{
   // I'm not sure how you want to continue in this case.
   ...      
}
Run Code Online (Sandbox Code Playgroud)