先试下:
xxDataTable.Sort="班级,评价结论 desc"
如果“评价结论”无法正确排序就只能再搞一列存评价结论对应的数值,然后用数值排序,再删除这列。
如果用这种方式,刚好能排出“优秀->良好->合格->不合格”顺序,可是不严谨啊,我也没去深究如何得到的,似乎是汉语拼音首字母? “Y >L>H>B”,如果以后结果值改成别的文字,这种排序就还得改。
我采用的你所说的实体类增加扩展属性,来便于排序的方法,虽然要至少改动两个类,但至少算是种简单而且高效的方法了。
DataTable中增加一个字段,比如:No
优秀的No取0,良好的No取1,依次类推
然后用DataTable.Select("", "No")排序
多谢回答,权衡后采用了实体类增加扩展属性的方法来便于排序。
@银川程序员.Net: 嗯,不客气
list.orderby(l=>l.班级).OrderByDescending(l=>l.评论结论)
"OrderByDescending(l=>l.评论结论)",如何判断得出“优秀->良好->合格->不合格”?
@银川程序员.Net: 你存放的是文字 优秀,良好 在数据库????
@chenping2008: 对啊,考虑到了要改数据库表,存入int型的,读取和存放时转换为string型的,可类似的表好几张,而且需要手动修改“转换”的地方很多,不现实啊。
@银川程序员.Net: 如果是int这个还好排序一点,如果是string,那就要麻烦您了
@chenping2008: 还是多谢啦,看来我不得不试试用DataTable里加一列的方式了
@银川程序员.Net:
在实体上再加个属性:
public int PinglunValue
{
get {
switch (Pinglun)
{
case "优秀": return 1;
case "良好": return 2;
case "合格": return 3;
case "不合格": return 4;
}
return 1;
}
}
再用orderby呢:.OrderBy(a => a.Cls).OrderBy(a => a.PinglunValue)
@向往-SONG: 完全可以
@向往-SONG:“ LINQ to Entities 不支持指定的类型成员“评价结论int”。只支持初始值设定项、实体成员和实体导航属性。”,我在实体类中添加了
public int 评价结论int
{
get
{
switch (评价结论)
{
case "优秀":return 1;
case "良好":return 2;
case "合格": return 3;
case "不合格":return 4;
default:return 0;
}
}
},但是会弹BUG,看来Linq to Entity不支持这种方式
order by charindex(字段名,’条件1,条件2,条件3‘)就可以了
我这用的是Linq查询,涉及表间关系(便于理解我例举的事一张表,其实是多张表间的查询),改写成SQL语句,对于我有点困难.
@银川程序员.Net: http://fqctyj.blog.163.com/blog/static/7084345520114128382600/
Linq to SQL: 自定义排序 - Q.yuhen 其实这层已经给出了答案,楼主只要用order by charindex加Linq搜索下就能得到自己想要的答案.
@银川程序员.Net: LINQ 也有charindex 方法var ulist=db.User.Where(u=>list.Contains(u.id)).OrderBy(o=>SqlFunctions.CharIndex("1,2,3,4,5",o.id));
@暗尘掩月: 试验了下,在SqlFunctions.CharIndex("1,2,3,4,5",o.id)里,CharIndex的参数不支持类似"优秀", "良好", "合格", "不合格"的string数组
理想中的解决方案,可惜对这个研究了一早上没成功,我采用了实体类增加便于排序的扩展属性的方式。谢谢了
关注,学习~