代码之家  ›  专栏  ›  技术社区  ›  Blixt

如何让LINQ根据文化进行订购?

  •  19
  • Blixt  · 技术社区  · 15 年前

    假设我有一个包含瑞典语单词的字符串列表: banan äpple , apelsin druva .

    现在我想对这个列表进行排序(请记住,这是真实查询的一个非常简化的版本):

    var result = from f in fruits // The list mentioned above
                 orderby f
                 select f
    

    这将给我: 阿佩尔辛 , ·菠萝 , 巴南 , . 然而,根据瑞典字母表,我应该得到: 德鲁瓦 ·菠萝

    我试着换衣服 System.Threading.Thread.CurrentThread.CurrentCulture sv-SE .OrderBy(...) 或者我还能做些什么来保持LINQ的完整性?

    2 回复  |  直到 6 年前
        1
  •  47
  •   Jon Skeet    15 年前

    不能使用查询表达式执行此操作,但可以使用显式点表示法执行此操作:

    var result = fruits.OrderBy(f => f, StringComparer.CurrentCulture);
    

    假设线程的当前区域性是正确的,就应该这样做。或者:

    CultureInfo culture = new CultureInfo("sv-SE");
    var result = fruits.OrderBy(f => f, StringComparer.Create(culture, false));
    
        2
  •  3
  •   Konstantin    12 年前

        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("sv-SE");
        var fruits = new[] { "banan", "äpple", "apelsin", "druva" };
        var result = (from f in fruits orderby f select f).ToList();
    
        // outputs: apelsin, banan, druva, äpple
        string resultsJoined = string.Join(", ", result);