有一些业务上并不要求查询出全部数据,而是随机取出几条数据,应用场景如下:
我要从一群人当中选择1个人获得奖金,为了保证每个人的公平性,必须采用随机算法
sql语法中,我们可以这样写
select top 1 *
from t
order by newid()
c#当中,可以用Random类来获取随机数
EF当中,我们写Linq时,抑或是采用Linq的扩展方法时,发现都没有随机排序的方法,这就要求我们自己去扩展了
引用自http://www.cnblogs.com/lori/p/3166899.html
/// <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
}