我正在尝试使用实体框架OrderByDescending
或OrderBy
对某些字符串进行排序
但有些如何不工作,我需要使用字符串比较器排序。
这是我的代码:
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
如果还有其他方法可以做同样的事情,请建议。
答案 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>
,并且在枚举集合之前不会使用比较器。但是,您没有存储此操作的结果,因此它永远不会发生。