EF架构~linq to entity的随机排序问题
2013-07-02 14:21
405 查看
回到目录
对于从linq to sql迁移过来的开发者,对随机排序不会感到陌生,直接为datacontext添加一个方法再配合反射就可以实现随机排序了,代码如下:
而对于linq to entity的开发者们就不能使用上面的方法了,因为dbcontext没有ExecuteMethodCall这个方法,呵呵,只有自己想辙了,事实上,对于system.Data.Entity空间里有一个EdmFunction的特性,它与linq to sql里的Function特性类似,都是标识类为函数,就是使用数据源的某个函数,如Sqlserver的newid函数,我们可以把它思路整理一下,代码就出来了,我们像它种与领域无关的代码放在core项目里,表示为公用代码
而为了使开发者在使用上方法,我们把NewId作成IEnumerable接口的扩展方法,这样无论是IQueryable还是IList,List集合都可以直接使用它了,看代码
而使用了IEnumerable的集合扩展后,它是否还有延时加载的特性,通过我们的检测,答案是肯定的,它是延时的,下面是我们的例子
结果如下:
![](http://images.cnitblog.com/blog/118538/201307/02141944-2f5f7d9df89a4f52852e357ccee70372.jpg)
而进行数据库检测的结果,出是令我们满意的,只取了5条数据
![](http://images.cnitblog.com/blog/118538/201307/02142023-ea35224047da4419b112288658dc4c8d.jpg)
OK,到这种使用linq to entity(entity frameworks环境下)的随机排序就介绍到这里,谢谢阅读!
回到目录
对于从linq to sql迁移过来的开发者,对随机排序不会感到陌生,直接为datacontext添加一个方法再配合反射就可以实现随机排序了,代码如下:
/// <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 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(5).ToList();//只取5条 return View(); }
结果如下:
![](http://images.cnitblog.com/blog/118538/201307/02141944-2f5f7d9df89a4f52852e357ccee70372.jpg)
而进行数据库检测的结果,出是令我们满意的,只取了5条数据
![](http://images.cnitblog.com/blog/118538/201307/02142023-ea35224047da4419b112288658dc4c8d.jpg)
OK,到这种使用linq to entity(entity frameworks环境下)的随机排序就介绍到这里,谢谢阅读!
回到目录
相关文章推荐
- 解决EasyUI-Datagrid和LinqToEntity结合应用时排序问题
- 解决EasyUI-Datagrid和LinqToEntity结合应用时排序问题
- EF架构~LinqToEntity里实现left join的一对一与一对多
- Linq To EF 使用小知识(添加记录后获取添加的自增ID和叫“ID”的列不是自增列不让插入的问题)
- Linq To EF 使用小知识(添加记录后获取添加的自增ID和叫“ID”的列不是自增列不让插入的问题)
- 将不确定变为确定~Linq to SQL不能随机排序吗?
- 关于使用Linq to sql作为数据交互时的架构问题
- LinqToSql EntityFramework(ef)查看生成的sql语句
- LinqToEntity中.toString()与.toShortDateTime()无法使用的问题解决方式
- VS2008下使用Linq To Entity的Skip().Take()分页查询时遇到数据结果不对的问题
- Linq中字段数据类型转换问题(Linq to entity,LINQ to Entities 不识别方法"System.String ToString()"问题解决)
- Linq to Entity 时间差作为筛选条件产生的问题
- Linq to Entity中连接两个数据库时要注意的问题
- Linq to entity 3.5 左联接问题
- 关于linq to sql 或linq to entity 随机取数据
- EF Provider for Access/ODBC 以及ADO.Net Entity Framework 与Linq to SQL的比较和适用场景
- Linq To EF 用泛型时生成的Sql会查询全表的问题
- Linq to entity 执行多个字段排序的方法
- Linq to Entity 的问题