c# - 按多个键分组并忽略大小写

标签 c# linq

当我尝试执行以下操作时,

collection.GroupBy(item => new
                        {
                            item.Item1,
                            item.Item2,
                            item.Item3,
                            item.Item4
                        }, StringComparer.CurrentCultureIgnoreCase)

我收到无法从用法中推断参数类型的错误,并尝试明确指定类型参数。

正确的语法是什么?

最佳答案

顾名思义,StringComparer 用于比较简单的字符串,而不是匿名类型。

来自 StringComparer 上的 MSDN 页面:

Represents a string comparison operation that uses specific case and culture-based or ordinal comparison rules.

要比较你的类,你可以创建自己的比较器:

public class CustomComparer : IEqualityComparer<SomeClass>
{
    public bool Equals(SomeClass x, SomeClass y)
    {
        return String.Equals(x.Item1, y.Item1, StringComparison.CurrentCultureIgnoreCase)
               && String.Equals(x.Item2, y.Item2, StringComparison.CurrentCultureIgnoreCase)
               && String.Equals(x.Item3, y.Item3, StringComparison.CurrentCultureIgnoreCase);
    }

    public int GetHashCode(SomeClass obj)
    {
        return string.Concat(obj.Item1.ToLower(),
                             obj.Item2.ToLower(),
                             obj.Item3.ToLower()).GetHashCode();
    }
}

并在 GroupBy 中使用它:

var collection = new List<SomeClass>();

// populate collection

collection.GroupBy(item => item, new CustomComparer());

这应该可行,尽管您可能需要尝试一下。

关于c# - 按多个键分组并忽略大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24174705/

相关文章:

javascript - 查找用户的位置并将其显示在单个回发的弹出窗口中

c# - 聚合和区分 linq 查询输出以列出

c# - 从 SQL Server 数据库更新前端 WPF 应用程序

c# - 如何按列格式化数据表行数据

c# - WinForms 应用程序无法在其他计算机上打开

c# - 是否存在强制对 OR 条件语句中的两个表达式求值的模式或技巧?

c# - Ping.SendAsyncCancel 挂起任务

c# - 将代码放在项目的根目录中可以吗?

linq - 简化 LINQ 查询

c# - 如何在对另一个属性求和的同时聚合一个属性?