c# - 如何使用 System.Dynamic.Linq 排序不区分大小写?

标签 c# linq

我使用 System.Linq.Dynamic 来订购项目列表。

items = items.AsQueryable().OrderBy("Name ASC");

令我惊讶的是,小写名称在大写名称之后排序,因此返回的项目如下所示。

Ape
Cat
Dog
alligator
ant
beetle

我期望这个订单:

alligator
ant
Ape
beetle
Cat
Dog

有没有办法获得正确的顺序?检查了 OrderBy 的所有方法签名并用谷歌搜索,但什么也没有。

最佳答案

您不需要创建自定义比较器,因为已经有 StringComparer派生自 IComparer 的类。

words.OrderBy (x => x, StringComparer.OrdinalIgnoreCase)

这样,如果您想使用其他字符串比较方法(例如 StringComparer.InvariantCultureIgnoreCase),则无需创建不同的 IComparer 实现。

但是,根据您的情况,这可能是可取的。例如,我确实在 LINQPad 中定义了多个扩展方法,例如 OrderBySelfInvariantCultureIgnoreCase,因为将其与代码完成一起使用比手动键入等效代码更方便:

public static IEnumerable<string> OrderBySelfInvariantCultureIgnoreCase(this IEnumerable<string> source)
{   
    return source.OrderBy (x => x, StringComparer.InvariantCultureIgnoreCase);
}

关于c# - 如何使用 System.Dynamic.Linq 排序不区分大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29379650/

相关文章:

c# - 带有 Prev/Next 的 IEnumerable

mysql - 在 EntityFramework 中连接两个表

c# - Asp.net调用C#层调用Managed C++调用Native C++

c# - SQL to LINQ with Case .. When in Order By

c# - 需要 SearchBar 给出相同的结果,无论其字母是否大写

c# - 展平 N 个数组

c# - 在Linq中使用List<Tuple<int, int>>返回数据

c# - 使用 ALL 的 LINQ 查询

c# - 高效处理顺序文件C#

c# - AvalonDock DockingManager 不加载布局