我使用 System.Linq.Dynamic 订购项目列表。
items = items.AsQueryable().OrderBy("Name ASC");
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,小写名称在大写名称之后排序,因此返回的项目是这样的。
Ape
Cat
Dog
alligator
ant
beetle
Run Code Online (Sandbox Code Playgroud)
我期望这个顺序:
alligator
ant
Ape
beetle
Cat
Dog
Run Code Online (Sandbox Code Playgroud)
有没有办法得到正确的顺序?检查了 OrderBy 的所有方法签名并用谷歌搜索,但 nada。
Mos*_*oss 10
您不需要创建自定义比较器,因为已经有一个StringComparer派生自IComparer.
words.OrderBy (x => x, StringComparer.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)
这样,IComparer如果您想使用其他字符串比较方法(如StringComparer.InvariantCultureIgnoreCase.
但是,根据您的情况,这可能是可取的。例如,我确实在 LINQPad 中定义了多个扩展方法,例如OrderBySelfInvariantCultureIgnoreCase,因为在代码完成中使用它而不是手动输入等效代码很方便:
public static IEnumerable<string> OrderBySelfInvariantCultureIgnoreCase(this IEnumerable<string> source)
{
return source.OrderBy (x => x, StringComparer.InvariantCultureIgnoreCase);
}
Run Code Online (Sandbox Code Playgroud)
小智 2
您必须创建一个自定义比较器,例如:
public void Main()
{
String[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" };
var sortedWords = words.OrderBy(a => a, new CaseInsensitiveComparer());
ObjectDumper.Write(sortedWords);
}
public class CaseInsensitiveComparer : IComparer<string>
{
public int Compare(string x, string y)
{
return string.Compare(x, y, StringComparison.OrdinalIgnoreCase);
}
}
Run Code Online (Sandbox Code Playgroud)
找到@ https://code.msdn.microsoft.com/SQL-Ordering-Operators-050af19e
| 归档时间: |
|
| 查看次数: |
5371 次 |
| 最近记录: |