在LINQ中对中文进行特定顺序的排序

19人阅读 评论(0) 收藏 举报
分类:

在LINQ中对中文进行特定顺序的排序

常规讨论

大家好,想向大家请教一下LINQ中队中文的排序问题。我只知道排序是按拼音进行的,模拟一下我的需求,现在有这样一个数组

var strArr = new String[] { "三", "一", "四", "五", "二", "六" };

想用LINQ排成 “一二三四五六” 的顺序,请问有办法实现吗?

谢谢

————————————

2014年3月20日 更新

可能是我之前的例子举的不太好啊……随手就打了这些个中文数字,误导了大家,自己也没把需求说明白

实际上是这样的,表中有一列记录的是状态,再举个例吧。。例如状态有“新建”、“进行”和“完成”三种(实际中有更多),每次LINQ查询出来后按默认排序都是“进行”在前,我想让“新建”在最前面,有办法实现吗?

谢谢。

————————————

还是 2014年3月20日 ,想到一个办法,就是比较繁琐,通过在Order方法里面写三目运算符可以生成CASE..WHEN..THEN语句,突发奇想试了一下发现可以,代码如下

(from t in table
select t).OrderBy(t => (t.State.Equals("新建") ? 1 :
                                   (t.State.Equals("进行") ? 2 :
                                   (t.State.Equals("完成") ? 3 : 4))))

但是这样子写维护起来太麻烦了吧,有没有好的推荐,或者是LINQ提供了更好的方法?

谢谢大家了。

2014年3月13日 3:35
5 分数

全部回复

  • 大写数字这种,只能自定义规则排序吧
    2014年3月13日 4:43
    10 分数
  • http://blog.sina.com.cn/s/blog_63e177c50101504v.html

    请参照上面的C#大写中文转成数字(万位以下适用),再使用

    var strArr = new String[] { "三", "一", "四", "五", "二", "六" };
    strArr = strArr.OrderBy(x => GetNumber(x)).ToArray();
    就可以将大写中文排序。
    2014年3月13日 5:29
    725 分数
  • 谢谢,不好意思没有及时回复。

    可能是我的例子举的不太好……随手就打了这些个中文数字 =。=

    实际上还有这样的,例如表中有一列记录的是状态,再举个例吧。。例如状态有“新建”、“进行”和“完成”三种(实际中有好多种),每次LINQ查询出来后按默认排序都是“进行”在前,我想让“新建”在最前面,有办法实现吗?

    谢谢。

    2014年3月20日 4:14
    5 分数
  • 呃,我自己想到一个办法,是利用在LINQ方法里面书写三目运算符能被理解成CASE..WHEN..THEN的SQL语句来实现的,试了一下没有问题,就是做起来太繁琐,也不好维护,代码如下

    (from t in table
    select t).OrderBy(t => (t.State.Equals("新建") ? 1 :
                                         (t.State.Equals("进行") ? 2 :
                                         (t.State.Equals("完成") ? 3 : 4))))

    还希望大家探讨一下,谢谢了

    2014年3月20日 6:32
    5 分数
  • 呃,我自己想到一个办法,是利用在LINQ方法里面书写三目运算符能被理解成CASE..WHEN..THEN的SQL语句来实现的,试了一下没有问题,就是做起来太繁琐,也不好维护,代码如下

    (from t in table
    select t).OrderBy(t => (t.State.Equals("新建") ? 1 :
                                         (t.State.Equals("进行") ? 2 :
                                         (t.State.Equals("完成") ? 3 : 4))))

    还希望大家探讨一下,谢谢了

    Hi,你可以用一个字典来保存不同内容预定义的次序值,比如

    private Dictionary<string, int> _priorityDic = new Dictionary<string, int>();
    
    ...
    _priorityDic["新建"] = 1;
    _priorityDic["进行"] = 2;
    _priorityDic["完成"] = 3;
    ...
    
    (from t in table
    select t).OrderBy(t => _priorityDic.ContainsKey(t.State.ToString()) ? _priorityDic[t.State.ToString()] : Int32.MaxValue)
    这样以后要修改是,只需要更改字典的内容就可以了,不需要更改排序的代码。
    2014年3月21日 10:43
    14,720 分数
  • 您好,非常感谢回复。

    不过我尝试了一下发现会报错:System.NotSupportedException: LINQ to Entities 不识别方法“Boolean ContainsKey(System.String)”,因此该方法无法转换为存储表达式。

    LINQ没法转换这个方法吧。不过还是很谢谢提供这样一种思路!

查看评论

LINQ 根据指定属性名称对序列进行排序

///         /// 根据指定属性名称对序列进行排序         ///         /// source中的元素的类型         /// 一个要排序的值序列  ...
  • yousuf007
  • yousuf007
  • 2015-01-08 13:49:35
  • 756

linq order by charindex 排序 按给定字符串顺序排序

//list=list.OrderBy(ee => SqlFunctions.CharIndex("书记,主任,支部委员,村委委员,系统工作人员", ee.ZhiWu)).ToList(); //li...
  • jelenyoung
  • jelenyoung
  • 2015-06-03 18:47:47
  • 2295

用linq对数组排序及简单运算

// 初始数组 int[] arr = { 8, 10, 5, 6, 45, 676, 20, 35 }; // 对其按...
  • luols
  • luols
  • 2010-06-28 16:27:00
  • 4905

LINQ排序,用order by 子句进行排序

在LINQ中,orderby子句可以同时指定多个排序元素,还可以为每个排序元素指定独立的排序方式。orderby语句后的第一个的排序元素为主要排序,第二个位次要排序,依次类推,如下所示,将所有学生首先...
  • wfy230625
  • wfy230625
  • 2015-12-28 19:25:20
  • 1514

java对集合元素的特定排序

public class CollectionSort { public static void main(String[] args) { List li = new ArrayList();...
  • qq_32998153
  • qq_32998153
  • 2017-04-25 21:48:08
  • 144

C#字典Dictionary排序(顺序、倒序)

C# .net 3.5 以上的版本引入 Linq 后,字典Dictionary排序变得十分简单,用一句类似 sql 数据库查询语句即可搞定;不过,.net 2.0 排序要稍微麻烦一点,为便于使用,将总...
  • nkliming
  • nkliming
  • 2014-06-14 03:56:41
  • 3246

java List 的两个排序方式(附:汉字字典排序方式)

List 中的ArrayList本身是按照添加顺序排列的,但是有时候想自定义排序方式怎么办呢? 1、List中的Record 实现 Comparable接口并复写compareto方法 public ...
  • Leo_perfect
  • Leo_perfect
  • 2016-08-13 14:51:36
  • 3255

C# 用linq对某个文件夹内的文件进行排序

首先必须添加对Linq的引用, using System.Linq;using System.IO;               DirectoryInfo di = new DirectoryInf...
  • soft2buy
  • soft2buy
  • 2010-08-23 18:37:00
  • 1481

string字符进行自然顺序排序。

/* 对字符串中字符进行自然顺序排序。 思路: 1,字符串变成字符数组。 2,对数组排序,选择,冒泡,Arrays.sort(); 3,将排序后的数组变成字符串。 ...
  • wangbo910927
  • wangbo910927
  • 2015-09-08 08:32:42
  • 329

对字符串中的字符进行自然排序

需求:对字符串中的字符进行自然顺序排序思路:1.先把字符串转换字符数组2.排序3.把字符数组转换回字符串 public class test4 { public static void main(...
  • a909301740
  • a909301740
  • 2016-08-22 21:16:44
  • 4313
    个人资料
    持之以恒
    等级:
    访问量: 4万+
    积分: 1119
    排名: 4万+
    文章分类