2014-02-20 2 views
2

Следующий код C# содержит большой набор данных со многими столбцами и массив из двух имен столбцов. Он даст новый тип данных с двумя строками, где есть дубликаты строк для двух полей, предоставленных персоналу, & умение. Это слишком специфично, и мне нужно указать любое количество полей в качестве 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 –