c# – 我可以使用LINQ跳过一个集合,只返回100条记录吗?
我有以下内容从Azure表存储返回一个集合,其中没有实现Skip.返回的行数约为500.
ICollection<City> a = cityService.Get("0001I"); 我想做的是能够依赖于一个参数只返回以下范围: records 1-100 passing in 0 as an argument to a LINQ expression records 101-200 passing in 100 as an argument to a LINQ expression records 201-300 passing in 200 as an argument to a LINQ expression records 301-400 passing in 300 as an argument to a LINQ expression etc 有什么方法可以添加到上面并使用链接来获取这些范围 解决方法
正如您在问题中所述,在Windows Azure表存储中未实现Skip方法.这意味着您还剩2个选项:
选项1 从表存储中下载所有数据(通过使用ToList,请参阅abatishchev的答案)并在此完整列表上执行Skip and Take方法.在您的问题中,您正在谈论500条记录.如果记录数量没有增长太多,这个解决方案对你来说应该没问题,只需要确保所有记录都有相同的分区键. 如果数据增长,你仍然可以使用这种方法,但我建议你评估一个缓存解决方案来存储所有记录,而不是一遍又一遍地从表存储中加载它们(这将提高性能,但不要指望它能够工作有非常大量的数据).使用以下命令在Windows Azure中进行缓存: > Windows Azure Caching (Preview) 选项2 CloudTableQuery类允许您查询数据,但更重要的是接收延续令牌以构建分页实现.这允许您检测是否可以查询更多数据,Scott的博客上的分页示例(请参阅nemensv的评论)使用此. 有关延续令牌的更多信息,我建议您查看Jim的博客文章:Azure@home Part 7: Asynchronous Table Storage Pagination.通过使用延续令牌,您只下载当前页面的数据,这意味着即使您有数百万条记录,它也能正常工作.但是你必须知道使用延续令牌的缺点: >这不适用于开箱即用的Skip方法,因此它可能不适合您.>没有页面’数字’,因为你只知道是否有更多的数据(不是多少)>无法计算所有记录 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |