///& lt;總結& gt
///執行Select distinct後返回數據表。
///& lt;/summary & gt;
///& lt;param name = " SourceTable " & gt源數據表
///& lt;param name = " FieldNames " & gt字段集
///& lt;returns & gt& lt/returns & gt;
私有數據表SelectDistinct(數據表源表,參數字符串[]字段名稱)
{
object[]last values;
DataTable newTable
DataRow[]ordered rows;
if(field names = = null | | field names。長度== 0)
拋出新的ArgumentNullException(" field names ");
lastValues =新對象[字段名稱。長度];
new table = new DataTable();
foreach(字段名中的字符串字段名)
新表格。Columns.Add(fieldName,SourceTable。列[字段名稱]。數據類型);
orderedRows = SourceTable。選擇(",字符串。Join(",",field names));
foreach(ordered rows中的DataRow行)
{
如果(!fieldValuesAreEqual(最後值,行,字段名))
{
新表格。Rows.Add(createRowClone(row,newTable。NewRow()、field names));
setLastValues(lastValues,row,field names);
}
}
返回newTable
}
private bool field values saree equal(object[]last values,DataRow currentRow,string[] fieldNames)
{
bool areEqual = true
for(int I = 0;我& lt字段名稱。長度;i++)
{
if (lastValues[i] == null ||!lastValues[i]。equals(current row[field names[I]]))
{
areEqual = false
打破;
}
}
回報是平等的;
}
私有數據行createRowClone(數據行源行,數據行新行,字符串[]字段名稱)
{
foreach(字段名中的字符串字段)
newRow[field]= source row[field];
返回newRow
}
private void setLastValues(object[]last values,DataRow sourceRow,string[] fieldNames)
{
for(int I = 0;我& lt字段名稱。長度;i++)
last values[I]= source row[field names[I]];
}