c# - 按运行时已知的多个键分组

标签 c# .net linq

我有一个 telerik 网格,我将对象列表数据绑定(bind)到页面上。用户可以在查看数据时根据自己的喜好对列进行分组。我正在编写一个函数以将此数据导出到 excel 文档中,并希望保留用户在页面上的分组。我能够获取用户分组所依据的对象属性的字符串名称。

我坚持的是如何在运行时进行分组。有很多这样的例子:Group by with multiple columns using lambda描述如何在您提前知道的情况下在编译时按多个属性分组。但是,直到在运行时我才知道要分组的内容。

关于如何在运行时进行分组有什么建议吗?

最佳答案

您可能正在寻找类似 this SO question 的答案,特别是:

var myData = gridData.AsEnumerable()
                     .GroupBy(r => r, new MyDataComparer(keys))
                     .ToList();

internal class MyDataComparer : IEqualityComparer<MyDataType>
{
    private readonly string[] _keys;

    public MyDataComparer(string[] keys)
    {
        _keys = keys; // keep the keys to compare by.
    }

    public bool Equals(MyDataType x, MyDataType y)
    {
        // a simple implementation that checks if all the required fields 
        // match. This might need more work.
        bool areEqual = true;
        foreach (var key in _keys)
        {
            areEqual &= (x[key].Equals(y[key]));
        }
        return areEqual;
    }

    public int GetHashCode(DataRow obj)
    {
        // Add implementation here to create an aggregate hashcode.
    }
}    

关于c# - 按运行时已知的多个键分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26889348/

相关文章:

C# 日期时间格式化

c# - 从 bcp 客户端接收到 colid 6 的无效列长度

asp.net - ASP.Net/C#,在页面上的某些控件之间循环?

sql - UseDatabaseNullSemantics 仍然生成 NULL 检查

c# - 使用 .Netcore 库的 FxCop 分析在 VS2015 更新 3 中失败

c# - OData 过时代码

c# - .NET 反射 - 泛型类型定义的 GetInterfaces() 结果无法与泛型文字类型成功比较

c# - 获取所有祖 parent ID 等于 1 的 child

c# - 登录用户声明的两种方式 - 哪种方式更好?

c# - 自动将所有控件属性从 resx 文件移动到 Designer.cs 代码文件