EF 随机排序
/// <summary>
/// 数据上下文扩展
/// </summary>
public partial class dbDataContext : IUnitOfWork
{
/// <summary>
/// 随机排序时使用这个函数
/// </summary>
/// <returns></returns>
[Function(Name = "NewID", IsComposable = true)]
public Guid NewID()
{
return ((Guid)(this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod()))).ReturnValue)); }
}
对于从linq to sql迁移过来的开发者,对随机排序不会感到陌生,直接为datacontext添加一个方法再配合反射就可以实现随机排序了,代码如面所示
而对于linq to entity的开发者们就不能使用上面的方法了,因为dbcontext没有ExecuteMethodCall这个方法,呵呵,只有自己想辙了,事实上,对于system.Data.Entity空间里有一个EdmFunction的特性,它与linq to sql里的Function特性类似,都是标识类为函数,就是使用数据源的某个函数,如Sqlserver的newid函数,我们可以把它思路整理一下,代码就出来了,我们像它种与领域无关的代码放在core项目里,表示为公用代码
/// <summary>
/// sql函数的扩展类
/// </summary>
public static class SqlFunctionExtensions
{
/// <summary>
/// 在linq to entity中使用SqlServer.NEWID函数
/// </summary>
[System.Data.Objects.DataClasses.EdmFunction("SqlServer", "NEWID")]
public static Guid NewId()
{
return Guid.NewGuid();
}
}
而为了使开发者在使用上方法,我们把NewId作成IEnumerable接口的扩展方法,这样无论是IQueryable还是IList,List集合都可以直接使用它了,看代码
/// <summary>
/// sql函数的扩展类
/// </summary>
public static class SqlFunctionExtensions
{
#region 功能方法
/// <summary>
/// 在linq to entity中使用SqlServer.NEWID函数
/// </summary>
[System.Data.Objects.DataClasses.EdmFunction("SqlServer", "NEWID")]
public static Guid NewId()
{
return Guid.NewGuid();
}
#endregion #region 扩展方法
/// <summary>
/// 随机排序扩展方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <returns></returns>
public static IQueryable<T> OrderByNewId<T>(this IEnumerable<T> source)
{
return source.AsQueryable().OrderBy(d => NewId());
}
#endregion }
而使用了IEnumerable的集合扩展后,它是否还有延时加载的特性,通过我们的检测,答案是肯定的,它是延时的,下面是我们的例子
public ActionResult Index()
{
var list = irepository.GetEntities();
ViewBag.List = list.OrderByNewId().Take().ToList();//只取5条
return View();
}
结果如下:

而进行数据库检测的结果,出是令我们满意的,只取了5条数据

OK,到这种使用linq to entity(entity frameworks环境下)的随机排序就介绍到这里,谢谢阅读!
EF 随机排序的更多相关文章
- EF架构使用随机排序
c#当中,可以用Random类来获取随机数 EF当中,我们写Linq时,抑或是采用Linq的扩展方法时,发现都没有随机排序的方法,这就要求我们自己去扩展了 引用自http://www.cnblogs. ...
- Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 原理and实现
Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 1. 应用场景 1 2. 随机抽取数据原理 1 3. 常用的实现方法:::数据库随机函数 1 4. Mssq ...
- JS数组随机排序
var arr=[1,2,3,4,5]; arr.sort(function(a,b){ var v=Math.random()>0.5?1:-1; console.log(a,b,v); re ...
- LINQ对List列表随机排序,取N条数据
List<Art_Search> artList=new List<Art_Search>(); artList=artList.OrderBy(s => Guid.Ne ...
- js实现数组内元素随机排序
其实蛮容易实现的,关键是简洁与否,下面是我自己写的. function randomSort(a){ var arr = a, random = [], len = arr.length; for ( ...
- JavaScript随机排序算法1
1.对数组循环,每一项与随机的某一项位置调换 <ul id="listOne"></ul> <div id="tempOne"&g ...
- List 随机排序
List<T> l = new List<T>(); l = l.Select(a => new { a, newID = Guid.NewGuid() }).Order ...
- Unity中List的随机排序(乱序)
为什么要给List排序做一个Unity限定条件呢 首先,是C#中的List泛型,若是Java,直接调用Collection.shuffle()就OK了 而Unity的C#版本较低,不能使用Random ...
- c++随机排序容器中的元素
在各种程序语言中都提供了将容器元素随机排序的shuffle方法,c++也不例外. 不过c++将shuffle放在了<algorithm>中而不是像其他语言一样在random里,同时c++1 ...
随机推荐
- 第4章 awk编程
1 awk编程模型 2 awk用法 调用awk有三种方法(与sed类似): 在Shell命令行输入命令调用awk,格式为: awk [-F 域分隔符] 'awk程序段' 输入文件 将awk ...
- NOIP1998 拼数
http://www.luogu.org/problem/show?pid=1012 题目描述 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,3 ...
- 处理SVN的提交代码冲突
工具: 一台开发的电脑,myeclipse,TortoiseSVN1.8 步骤: 1.不管是提交.更新.编辑冲突第一个操作都应该是和资源库进行同步,项目右键==>Team==>于资源库同步 ...
- centos6.5没有eth0, 只有eth1, eth1无法上网
1. cat /etc/udev/rules.d/70-persistent-net/rules 2.将ATTR(address)=XXXXXXXX的内容 替换 文件/etc/sysconfig/ ...
- 洛谷P2729 饲料调配 Feed Ratios
P2729 饲料调配 Feed Ratios 36通过 103提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目背景 农夫约翰从来只用调 ...
- asp.net中如何绑定combox下拉框数据(调用存储过程)
#region 绑定类型(商品类型.仓库名称) public void DataType_Bind(int _peoid) { DataTable dt_goodsname = new DataTab ...
- 理解Linux启动过程
传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统)处理,而基于init的启动系统被认为有效率不足的问题,systemd是Linux系统机器的另一种启动方式,宣称 ...
- ASP.NET的SEO:基础知识
本系列目录 首先谈一点我自己的体会,我还是希望能和大家分享: 当你读到一定数量的SEO资料后,你会发现,对同一个问题,众说纷纭,莫衷一是.这其实主要是因为以下一些原因造成的:1. 很多SEO技巧,是& ...
- linux进程状态
系统维护的时候难免会遇到进程的状态的查询和管理,到底什么是R,有的是S,有的还是S+呢?一直有些混沌的问题,今天细细的来总结一下: ps是用来报告系统中程序执行状况的命令这个是无可厚非的,linux进 ...
- .NET Web开发总结
在aspx文件中 创建控件 在右下角有控件信息 按类排序 会将控件信息安装类排序 点击控件 会增加属性页面的分页[事件]页面 可以增加其事件函数 字符串操作及其时间操作 fn_name.Inser ...