我正在使用LINQ跳过List
并且我想撤消跳过并拍摄以便我可以获得整个收藏。
例如
List<int> aThousandObjects = Enumerable.Range(1,1000).ToList();
List<object> list = aThousandObjects;
int listOriginalLength = list.Count();
int take = 100;
for(int taken = 0; taken < Math.Ceiling((double) listOriginalLength / 100) * 100; taken += take)
{
list = list.Skip(take);
updateValues(list.Take(take));
}
现在我想这样做是真的
list.Count() == listOriginalLength
这样我才能做到这一点
IEnumerable<object> newValues = list.Select(x => x.NewValue);
没有得到“没有结果”
答案 0 :(得分:6)
除非通过讨厌的反射来获取内部字段,否则无法打开合成查询。
但是:你可以回到原来的那个:
IEnumerable<object> list = aThousandObjects;
// compose LINQ etc...
// undo!
list = aThousandObjects;
这里的每个LINQ操作都是通过将一个IEnumerable<T>
封装在另一个内部来组成的。如果您随时快照(通过将当前可枚举存储在本地等):您可以返回到该快照 - 您无需返回到根列表。