2014-02-20 57 views
2

以下C#代碼需要一個包含多個列的大數據表和一個包含2個列名的數組。它會給兩個行提供一個新的數據表,其中有兩個重複的行提供了職員編號&技能。 這太具體了,我需要提供任何數量的字段作爲groupby。 有人可以幫助我嗎?參數化LINQ 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); 
} 

回答

0

我想你需要什麼東西讓LINQ更有活力,即使你可以通過使用表達式目錄樹中,DynamicLinq庫似乎解決您的問題更簡單的方法實現它。

對於你的情況下,與庫,只需使用的GroupBy擴展方法有一個字符串值。 約DynamicLinq庫更多信息:

Scott Gu's blog

+0

另外,看到這一點:http://stackoverflow.com/a/8759958/861716 –