EF+Linq,执行复杂排序查询
项目架构是EF+Linq+SqlServer 2008,现在遇到了一个“热点信息”的需求,要求按照下面代码里的算法来排序,各位谁能帮个忙,这个用Linq该怎么写?
LINQ Entity?Framework C# 算法
public class Info
{
/// <summary>
/// ID
/// </summary>
public int ID { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 阅读次数
/// </summary>
public int ViewTimes { get; set; }
/// <summary>
/// 分类ID
/// </summary>
public int ColumnID { get; set; }
/// <summary>
/// 状态
/// </summary>
public int StateID { get; set; }
}
public class InfoBusiService : AbstractBusiService<Info>
{
public List<Info> GetHotInfoes(int columnID = 0, int maxRows = 10)
{
var infoes = base.GetQueryable(i => i.StateID == 1);
infoes = columnID > 0 ? infoes.Where(i => i.ColumnID == columnID) : infoes;
//排行计算规则:N=X+A-B
//1)N:排行计算值
//2)X=阅读数
//3)A=创建时间.hh×60+创建时间.mm
//4)B=(当前日期-创建时间.dd)×1000
// 这个排序应该怎么写???
return infoes.Take(maxRows).ToList();
}
}
//得到次数
var a = infoes.Select(p => p.ViewTimes + p.CreateTime.Hour * 60 + p.CreateTime.Minute - ((DateTime.Now.Date - p.CreateTime.Date).TotalDays * 1000));
//得到排序后的infoes
var o = infoes.OrderByDescending(p => p.ViewTimes + p.CreateTime.Hour * 60 + p.CreateTime.Minute - ((DateTime.Now.Date - p.CreateTime.Date).TotalDays * 1000));