2014-03-05 15 views
6

我得到的项目列表与下面的LINQ表达式,更改列表项的顺序与有条件LINQ

var list = (from p in listData 
      orderby p.Code ascending 
      select new KeyValuePair<int, string>(p.Code, p.DESC) 
      ).Distinct<KeyValuePair<int, string>>().ToList<KeyValuePair<int, string>>(); 

我得到的名单为,

2,MEDICAL 
5,RETAIL 
6,OTHER 
7,GOVT 

通过Code有序

现在,我的预期结果如下,

2,MEDICAL 
5,RETAIL 
7,GOVT 
6,OTHER 

我知道我可以通过修改包含这些值的sql table或在指定序列顺序的表格中添加额外数字column来获得预期结果。

是否可以在不修改表格的情况下使用LINQ来获得结果?

+0

我想在里面下拉列表中指定的顺序显示值 – user3085995

回答

10

所以你想OTHER在最后的位置?

from p in listData 
orderby p.DESC == "OTHER" ascending, p.Code ascending 

这工作,因为true是“高于” false,也许你觉得这更易读:

orderby p.DESC == "OTHER" ? 1 : 0 ascending 
+1

感谢一个lot..it working..but仍然我不能理解它背后的逻辑 – user3085995

+0

@ user3085995:这类似于SQL。因此可以指定多个排序列。结果集按第一列排序,然后该排序列表按第二列排序,依此类推。在这种情况下,最高优先级的比较是'p.DESC =='OTHER'',它返回'true'或'false'。所以你得到两个组,这些组按第二列'p.Code'排序。在这种方式下,您首先会得到所有'DESC'不是'OTHER',然后全部由'Code'命令。 –