详解关于 C# 中 Linq 随机排序的有效解决方法
2012-11-21 16:47
381 查看
在做数据操作的时候,随机排序难免都会遇到。而如果使用 Linq 进行数据操作的话,你会发现 Linq 并没有提供随机排序的方法。而百度一下“Linq 随机排序”可以找到N多的方法,要非常简单的也有,要非常复杂也有,但是,这些方法里也有N多是行不通的,也有看到一篇博文,列出了五六种方法,然后在最后一一都注明了无效,行不通。
那么,到底在 Linq 中我们怎么实现对数据库查询出来的结果,进行随机排序呢?先不说废话,上代码:
代码简单明了,就是把一个 Shops 表里面的数据查询出来之后,随机排序,然后绑定到一个 DataGridView 中。是否觉得很熟悉?在网上一查一大堆告诉你用 Guid.NewGuid() 去排序的。但是,是否也觉得很奇怪?为什么有两次 ToList()?
这里需要说明一下,OrderBy(i => Guid.NewGuid()) 可以对一个实体列表进行随机排序,但不能对数据库中的表直接随机排序(其它排序是可以的),所以第一个 ToList() 我们是要让 Linq 去执行编译后的 SQL 语句,并得到一个 List<Shop> 类型的实体列表。然后再 OrderBy() 随机排序,但 OrderBy 之后又是一个泛型,所以我们还得再 ToList() 一次,好让它直接绑定到 DataGridView 上。
这里可能绕得有点乱,但最想说明的就是 ToList() 要放在 OrderBy(i => Guid.NewGuid()) 之前,就可以实现随机排序,而不用绕远路去自己写排序方法。
最后,这两行代码纯粹是实验性的 DEMO 代码,实际应用中可以根据不同需要,和有所改变,不一定要和我这样两个 ToList() 哈。
那么,到底在 Linq 中我们怎么实现对数据库查询出来的结果,进行随机排序呢?先不说废话,上代码:
var shops = db.Shops.ToList().OrderBy(i => Guid.NewGuid()).ToList(); this.dgvShops.DataSource = shops;
代码简单明了,就是把一个 Shops 表里面的数据查询出来之后,随机排序,然后绑定到一个 DataGridView 中。是否觉得很熟悉?在网上一查一大堆告诉你用 Guid.NewGuid() 去排序的。但是,是否也觉得很奇怪?为什么有两次 ToList()?
这里需要说明一下,OrderBy(i => Guid.NewGuid()) 可以对一个实体列表进行随机排序,但不能对数据库中的表直接随机排序(其它排序是可以的),所以第一个 ToList() 我们是要让 Linq 去执行编译后的 SQL 语句,并得到一个 List<Shop> 类型的实体列表。然后再 OrderBy() 随机排序,但 OrderBy 之后又是一个泛型,所以我们还得再 ToList() 一次,好让它直接绑定到 DataGridView 上。
这里可能绕得有点乱,但最想说明的就是 ToList() 要放在 OrderBy(i => Guid.NewGuid()) 之前,就可以实现随机排序,而不用绕远路去自己写排序方法。
最后,这两行代码纯粹是实验性的 DEMO 代码,实际应用中可以根据不同需要,和有所改变,不一定要和我这样两个 ToList() 哈。
相关文章推荐
- Linq学习-关于Linq语言的如何实现随机排序的疑问
- 关于Centos7 命令不能补全解决方法详解
- 【Linux学习笔记】关于ubuntu开机菜单栏和任务栏不见了的有效解决方法
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 关于C#中PictureBox加载动态GIF所出现的BUG以及解决方法
- 【Linux学习笔记】关于ubuntu开机菜单栏和任务栏不见了的有效解决方法
- 解决C#程序只允许运行一个实例的几种方法详解
- 关于C#操作PPT时遇到的“对COM组件的调用返回了错误HRESULT E_FAIL”错误的解决方法
- 解决C#程序只允许运行一个实例的几种方法详解
- 关于C#操作word 报错的解决方法
- [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询
- Oracle分页查询中排序与效率问题解决方法详解
- C#中关于从剪贴板中读取HTML格式含中文字符会出现的问题和解决方法
- c#关于int(或其他类型)的字段在对象初始化时默认初始化问题的解决方法
- 关于/dev/null 和 /dev/zero文件详解以及误删/dev/null和/dev/zero的解决方法和利用/dev/zero进行磁盘IO测试方法
- C#中一个关于format函数问题的解决方法
- 解决C# winForm自定义鼠标样式的两种实现方法详解
- 启动流程详解(关于解决gaosi.x脚本)的方法
- 关于Get,Post请求中文乱码问题有效解决方法
- 关于C#操作PPT时遇到的“对COM组件的调用返回了错误HRESULT E_FAIL”错误的解决方法