参数化LINQ GroupBy

时间:2014-02-20 12:21:40

标签: c# linq lambda

以下C#代码使用包含许多列的大型数据表和一个包含2个列名的数组。它将给出一个带有两行的新数据表,其中有两个字段的重复行,提供的工作人员编号为&技能。 这太具体了,我需要提供任意数量的字段作为groupby。 有人能帮助我吗?

string[] excelField = new string[0]; // contains a list of field name for uniquness
excelField[0] = "staff No";
excelField[1] = "skill";
DataTable dataTableDuplicateRows = new DataTable();
dataTableDuplicateRows.Clear();
dataTableDuplicateRows.Columns.Clear();

foreach (string fieldName in excelField)
{
    dataTableDuplicateRows.Columns.Add(fieldName);
}

var duplicateValues = dataTableCheck.AsEnumerable()
    .GroupBy(row => new { Field0 = row[excelField[0]], Field1 = row[excelField[1]] })
    .Where(group => group.Count() > 1)
    .Select(g => g.Key);

foreach (var duplicateValuesRow in duplicateValues)
{
    dataTableDuplicateRows.Rows.Add(duplicateValuesRow.Field0, duplicateValuesRow.Field1);
}

1 个答案:

答案 0 :(得分:0)

我认为你需要的是使linq更具动态性,即使你可以通过使用表达式树实现它,DynamicLinq库似乎可以更容易地解决你的问题。

对于你的情况,使用库,只需使用GroupBy扩展方法和字符串值。 有关DynamicLinq library的更多信息:

Scott Gu's blog