linq关于动态升序或降序进行排序,3个字段都要

supersunyi 2014-03-21 06:04:40
有3个字段要排序,但是升序或降序有参数决定
本来以为可以如下
if (第一个参数是升序)
query = query.orderby("a")
else
query = query.OrderByDescending("a")
endif
if (第二个参数是升序)
query = query.orderby("b")
else
query = query.OrderByDescending("b")
endif
if (第三个参数是升序)
query = query.orderby("c")
else
query = query.OrderByDescending("c")
endif
但发现这样不行,只支持最后一个order,请问我应该如何做啊,我考虑字段要不定,然后对应的排序不定
我用.vb写的,谁能给我个例子啊。简单点的好了,比如2个字段的
...全文
9633 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
咕咚诺娃 2015-08-27
  • 打赏
  • 举报
回复
orderby sort == 1 ? p.ID : p.ID descending 这样是不行的 orderby sort == 1 ? p.ID : (0 - p.ID) 这样是可以的
wg5945 2014-05-07
  • 打赏
  • 举报
回复
我之前回复过的一个帖子,LZ看一下是不是这个意思 http://bbs.csdn.net/topics/390773344
A924042864 2014-05-07
  • 打赏
  • 举报
回复
这个?
gangAndgang 2014-05-07
  • 打赏
  • 举报
回复
版主好像没有看懂楼主的意思,一个劲的解释thenby的意思,其实楼主懂,只是楼主不懂如何简单的像写SQL一样,写相同逻辑功能的LINQ
iceMung 2014-05-07
  • 打赏
  • 举报
回复
                IEnumerable<object> 原始;
                IOrderedEnumerable<object> 结果 = null;
                for(........)
                {
                    if (不需要排序) continue;
                    if (升序)
                    {
                        if (结果 == null) 结果 = 原始.OrderBy(x => 表达式);
                        else 结果 = 结果.ThenBy(x => 表达式);
                    }
                    else if (降序)
                    {
                        if (结果 == null) 结果 =  原始.OrderByDescending(x => 表达式);
                        else 结果 = 结果.ThenByDescending(x => 表达式);
                    }
                }
                return 结果;
supersunyi 2014-03-24
  • 打赏
  • 举报
回复
楼上的,那我的 如何实现如下情况呢 条件1的时候 首先按照体积顺序,体积一样的按照重量顺序,重量一样按照底面积顺序, 条件2的时候 首先按照体积降序,体积一样的按照重量降序,重量一样按照底面积顺序, 以此类推,有8个条件,我应该怎么写,根据条件x分别对应吗?
threenewbee 2014-03-24
  • 打赏
  • 举报
回复
ThenBy的含义是,对于前面排列相同的元素,按照ThenBy再来排序。 比如对包裹排序,首先按照体积排序,体积一样的按照重量排序,重量一样按照底面积排序,那就是 OrderBy(x => x.体积).ThenBy(x => x.重量).ThenBy(x => x.底面积)
supersunyi 2014-03-24
  • 打赏
  • 举报
回复
我不是说我不知道thenby,举个例子 第一个字段升序,第二个降序,第三个升序,那程序是orderby(1).ThenByDescending(2),ThenBy(3) 但是画面上改了一下变成第一个字段降序,第二个降序,第三个降序,那程序就是OrderByDescending(1).ThenByDescending(2),ThenByDescending(3),所以我不能写死程序啊 我就想知道sql的“order by 1 asc,2 desc, 3 asc这样的语法,里面的asc是动态变化的,到了linq,怎么写
  • 打赏
  • 举报
回复
http://social.msdn.microsoft.com/Search/zh-CN?query=ThenBy&emptyWatermark=true&searchButtonTooltip=Search MSDN&ac=4
supersunyi 2014-03-24
  • 打赏
  • 举报
回复
zhengnan2012,我是3个固定字段,第一个字段升序,第二个降序,第三个升序,这3个升序或者降序是传入的,字段是固定的,q107770540,你说的第二个开始,用thenby,我没看懂你说的意思
zhengnan2012 2014-03-24
  • 打赏
  • 举报
回复
OrderBy().ThenBy().ThenByDescending() 楼主变通一下吧. 你传入的是字符串,那道这个你还不可以控制吗? OrderBy(a?"a":"a1").ThenBy(b?"b":"b1")......
q107770540 2014-03-24
  • 打赏
  • 举报
回复
我意思是指,从第二个参数开始,用thenby 懂的?
supersunyi 2014-03-24
  • 打赏
  • 举报
回复
可是3个字段有8种可能的排序啊,难道我写8个条件语句 orderby.thenby,ThenByDescending orderby.ThenByDescending,ThenByDescending orderby.thenby,thenby orderby.ThenByDescending,thenby .....这样写下去吗,要是字段多,组合条件更多啊
q107770540 2014-03-21
  • 打赏
  • 举报
回复
.OrderBy().ThenBy().ThenByDescending()
q107770540 2014-03-21
  • 打赏
  • 举报
回复
orderby 后可以跟上N个 thenby的

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧