我有一个数据表,我想在其中对未指定数量的字段进行分组。发生这种情况的原因是用户可以选择他想要分组的字段。
所以,实际上,我将选择推入列表中。在这个选择上,我必须对我的数据表进行分组。
想象一下这段代码(VB 或 C# 都一样):
public void groupFieldsFN(DataTable dt, List<string> groupFields){
var grpQuery = dt.AsEnumerable().GroupBy(r => [***groupFields***]);
}
我能做些什么 ?我如何在这种情况下表达 GroupBy 表达式。
显然,LINQ 或 LAMBDA 解决方案是相同的。
先谢谢您的帮助。
_
SOLUTION
亚历克斯·安德烈耶夫的回应有效!非常感谢。
您可以使用自定义相等比较器GroupBy
称呼。定义你的比较器:
public class CustomEqualityComparer : IEqualityComparer<DataRow>
{
private readonly List<string> groupFields;
public CustomEqualityComparer(List<string> groupFields)
{
this.groupFields = groupFields;
}
public bool Equals(DataRow x, DataRow y)
{
var xCols = groupFields.Select(f => x[f]);
var yCols = groupFields.Select(f => y[f]);
var pairs = xCols.Zip(yCols, (v1, v2) => (v1, v2));
return pairs.All(p => p.Item1.Equals(p.Item2));
}
public int GetHashCode(DataRow obj)
{
return 42; // force Equals call
}
}
并使用它
var grpQuery = dt.AsEnumerable().GroupBy(r => r, new CustomEqualityComparer(groupFields));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)