首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

EF+Linq,施行复杂排序查询

2013-06-25 
EF+Linq,执行复杂排序查询项目架构是EF+Linq+SqlServer 2008,现在遇到了一个“热点信息”的需求,要求按照下

EF+Linq,执行复杂排序查询
项目架构是EF+Linq+SqlServer 2008,现在遇到了一个“热点信息”的需求,要求按照下面代码里的算法来排序,各位谁能帮个忙,这个用Linq该怎么写?


    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();
        }
    }
LINQ Entity?Framework C# 算法
[解决办法]
var q=infoes.OrderByDescending(t=>t.ViewTimes+CreateTime.Hour*60+CreateTime.Minute-(DateTime.Now.DayOfYear-CreateTime.DayOfYear)*1000);
------解决方案--------------------


囧~~~

infoes = infoes.OrderByDescending(t => t.ViewTimes + t.CreateTime.Hour * 60 + CreateTime.Minute - System.Data.Objects.EntityFunctions.DiffDays(DateTime.Now , t.CreateTime).Value * 1000);
[解决办法]


//得到次数
 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));

热点排行