IEnumerable.Select() 返回意外结果
IEnumerable.Select() returning unexpected results
我正在使用 C# 查询 Azure Table 存储,returns 一个 IEnumerable。我正在使用 .Select() 从我的结果中获取两个不同的属性,但每个属性的计数不正确。例如:
IEnumerable<SomeClass> results = table.ExecuteQuery(query);
IEnumerable<DateTime> dates = results.Select(x => x.Date);
IEnumerable<double> doubles = results.Select(x => x.Doubles);
每个结果都有一个日期和一个双精度值(我已经验证了这一点),所以它们中的每一个的计数应该完全相同并且结果但是它们返回不同。我可能有 300k 个结果,然后是 299,997 个日期和 300,003 个双打。
当我做类似的事情时:
results.ToList();
然后使用 .Select() 我得到了正确的结果。我试图避免首先将记录转换为列表,因为它花费的时间太长了。我还想避免使用 for 循环或 foreach 循环,因为它们也需要太长时间。
我的问题是:有没有办法在 IEnumerable 上使用 .Select() 并获得准确的结果?还是有另一种方法可以非常快地做到这一点?
注意:我将此数据绘制在 xy 图上,对于大约 300k 条记录,大约需要 1 分 30 秒。大约 90% 的时间是由于我有一个 foreach 循环。如果我先转换为列表,则处理时间会更长。在 IEnumerable 上使用 .Select() 非常快,但我需要可靠的结果并且 x 值的数量必须与 y 值相同。
Azure tables / SDK 使用惰性枚举。当您调用 executequery 但当您迭代返回的 Ienumerable 结果时,对 table 服务检索实体的实际 http 请求并未完成。这就是为什么在 select 遍历可枚举时看到差异结果的一种可能性,也许 table 上的数据正在改变?
我正在使用 C# 查询 Azure Table 存储,returns 一个 IEnumerable。我正在使用 .Select() 从我的结果中获取两个不同的属性,但每个属性的计数不正确。例如:
IEnumerable<SomeClass> results = table.ExecuteQuery(query);
IEnumerable<DateTime> dates = results.Select(x => x.Date);
IEnumerable<double> doubles = results.Select(x => x.Doubles);
每个结果都有一个日期和一个双精度值(我已经验证了这一点),所以它们中的每一个的计数应该完全相同并且结果但是它们返回不同。我可能有 300k 个结果,然后是 299,997 个日期和 300,003 个双打。
当我做类似的事情时:
results.ToList();
然后使用 .Select() 我得到了正确的结果。我试图避免首先将记录转换为列表,因为它花费的时间太长了。我还想避免使用 for 循环或 foreach 循环,因为它们也需要太长时间。
我的问题是:有没有办法在 IEnumerable 上使用 .Select() 并获得准确的结果?还是有另一种方法可以非常快地做到这一点?
注意:我将此数据绘制在 xy 图上,对于大约 300k 条记录,大约需要 1 分 30 秒。大约 90% 的时间是由于我有一个 foreach 循环。如果我先转换为列表,则处理时间会更长。在 IEnumerable 上使用 .Select() 非常快,但我需要可靠的结果并且 x 值的数量必须与 y 值相同。
Azure tables / SDK 使用惰性枚举。当您调用 executequery 但当您迭代返回的 Ienumerable 结果时,对 table 服务检索实体的实际 http 请求并未完成。这就是为什么在 select 遍历可枚举时看到差异结果的一种可能性,也许 table 上的数据正在改变?