不符合秩序的?

时间:2014-05-08 10:52:54

标签: c# entity-framework collections

我正在尝试使用实体框架OrderByDescendingOrderBy对某些字符串进行排序 但有些如何不工作,我需要使用字符串比较器排序。

这是我的代码:

public class MyStringComparer : IComparer<string> 
{
    CultureInfo culture = new System.Globalization.CultureInfo("no");
    public int Compare(string x, string y)
    {
            return string.Compare(x, y, true, culture);
    }
}
class Program
{
    static void Main(string[] args)
    {
        MyStringComparer comparer = new MyStringComparer();
        List<string> name = new List<string> { "åtestå", "aaabc", "åtestå", "Basxas","xxxax" };
        name.OrderByDescending(x => x, comparer);
        name.ForEach( x => {
            Console.WriteLine(x);
        });
        Console.ReadKey();
    }
}

永远不会打电话给比赛者,我错过了什么?

结果应为

  

aaabc
  Basxas
  xxxax
  ATESTA
  ATESTA

但它正在成为

  

ATESTA
  aaabc
  ATESTA
  Basxas
  xxxax

如果还有其他方法可以做同样的事情,请建议。

1 个答案:

答案 0 :(得分:4)

您可能希望阅读LINQ deferred execution

替换:

name.OrderByDescending(x=> x, comparer);
name.ForEach(x => { Console.WriteLine(x); });

使用:

var ordered = name.OrderByDescending(x=> x, comparer).ToList();
ordered.Foreach(Console.WriteLine);

<强>解释

name.OrderByDescending(x => x, comparer)返回IEnumerable<String>,并且在枚举集合之前不会使用比较器。但是,您没有存储此操作的结果,因此它永远不会发生。