Linq to SQL: 自定义排序

OrderBy:按升序对序列的元素进行排序;
OrderByDescending:按降序对序列的元素排序;
ThenBy:按升序对序列中的元素执行后续排序;
ThenByDescending:按降序对序列中的元素执行后续排序;
Reverse:反转序列中元素的顺序;

某些时候我们需要按照某个特定的序列来完成结果排序,比如说按in条件中的Id顺序返回文章。
比如按此顺序排序:1,5,2,6,3,7,4,9

SQL 语句如下:

select * from pdt_Music where MusicID in(1,2,3,4,5,6,7,8,9)
order by CHARINDEX(RTRIM(CAST(MusicID as NCHAR)),'5,2,8,1,3,4,6,7,9')

C# 中 LINQ 语句如下:

public object AAA()
{
    List<Music> list = new List<Music>();
    var num = "1,4,3,2,5".Split(',').Select(v => Convert.ToInt32(v)).ToArray();
    var query = db_C56.Musics.Where(w => num.Contains(w.MusicID)).Select
        (mm => new
        {
            MusicID = mm.MusicID,
            MusicName = mm.MusicName,
            MusicUrl = mm.MusicUrl,
            CreateBy = mm.CreateBy,
            Status = mm.Status,

            hourLength = ((DbFunctions)null).DateDiffHour(t.created_time.Value, t.created_time.Value),
            less = ((DbFunctions)null).DateDiffHour(t.created_time.Value, t.created_time.Value) < 6 ? "是" : "否",
            middle = ((DbFunctions)null).DateDiffHour(t.created_time.Value, t.created_time.Value) >= 6 
                   && ((DbFunctions)null).DateDiffHour(t.created_time.Value, t.created_time.Value) <=24 ? "是" : "否",
            more = ((DbFunctions)null).DateDiffHour(t.created_time.Value, t.created_time.Value) > 24 ? "是" : "否"
      };

        }).ToList();
    list = query.OrderBy(a => Array.IndexOf(num.Reverse().ToArray(), a.MusicID)).Select(s => new Music
    {
        MusicID = s.MusicID,
        MusicName = s.MusicName,
        MusicUrl = s.MusicUrl,
        CreateBy = s.CreateBy,
        Status = s.Status
    }).Skip(0).Take(10).ToList();
    return list;
}

public List<Music> BBB()
{
    List<Music> list = new List<Music>();
    var num = "1,2,3,4,5".Split(',').Select(v => Convert.ToInt32(v)).ToArray();
    var aa = (from m in db_C56.Musics
              where num.Contains(m.MusicID) && m.Status != "D"
              orderby m.MusicID
              select new
              {
                  m.MusicID,
                  m.MusicName,
                  m.MusicUrl,
                  CreateBy = m.CreateBy,
                  Status = m.Status
              }).ToList();
    list = aa.OrderBy(a => Array.IndexOf(num.Reverse().ToArray(), a.MusicID)).Select(s => new Music
    {
        MusicID = s.MusicID,
        MusicName = s.MusicName,
    }).Skip(0).Take(10).ToList();
    return list;
}

OrderBy、ThenBy

dbContext.Users.OrderBy(x => x.UserName).ThenBy(x => x.Age).ToList();

*
*
*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值