2014-02-20 4 views
2

다음 C# 코드는 많은 열과 두 개의 열 이름이있는 큰 데이터 테이블을 사용합니다. 제공된 두 개의 필드에 대해 중복 행이있는 두 행의 새로운 데이터 테이블을 제공합니다. & 스킬. 이것은 너무 구체적이어서 groupby로 필드 수를 제한해야합니다. 누군가 나를 도울 수 있습니까?Parameterise 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

나는 당신이 필요로하는 무언가가 당신의 DynamicLinq 라이브러리는 쉬운 방법으로 문제를 해결하기 위해 나타납니다 식 트리를 사용하여 얻을 수있는 경우에도 LINQ 더 동적으로 만들 생각합니다.

라이브러리의 경우 문자열 값으로 GroupBy 확장 메소드를 사용하십시오. DynamicLinq 라이브러리에 대한 더 많은 정보 :

Scott Gu's blog 또한

+0

, 볼이 : http://stackoverflow.com/a/8759958/861716 –