답변:
DataView view = new DataView(table);
DataTable distinctValues = view.ToTable(true, "Column1", "Column2" ...);
table.AsEnumerable().GroupBy(row => row.Field<int>("mo")).Select(group => group.First()).CopyToDataTable()
한 줄의 코드를 따르면 DataTable
: 의 중복 행을 피할 수 있습니다 .
dataTable.DefaultView.ToTable(true, "employeeid");
어디:
의 첫 번째 매개 변수는 ToTable()
A는 부울 는 별개의 행이나하지 여부를 나타냅니다.
의 두 번째 매개 변수는 ToTable()
고유 한 행을 선택해야하는 열 이름입니다. 이 열만 리턴 된 데이터 테이블에 있습니다.
DataSet
특정에 액세스하여 에서 동일한 작업을 수행 할 수 있습니다 DataTable
.
dataSet.Tables["Employee"].DefaultView.ToTable(true, "employeeid");
DefaultView
속성이 a 의 속성을 가리 키기 때문에이 답변이 가장 DataTable
좋습니다.
ToTable(boolean, params string[] columnNames)
방법을 사용하면 여러 열을 지정할 수 있습니다.
DataTable dt = new DataTable();
dt.Columns.Add("IntValue", typeof(int));
dt.Columns.Add("StringValue", typeof(string));
dt.Rows.Add(1, "1");
dt.Rows.Add(1, "1");
dt.Rows.Add(1, "1");
dt.Rows.Add(2, "2");
dt.Rows.Add(2, "2");
var x = (from r in dt.AsEnumerable()
select r["IntValue"]).Distinct().ToList();
당신은 그렇게 사용할 수 있습니다 :
data
이다 DataTable
data.DefaultView.ToTable(true, "Id", "Name", "Role", "DC1", "DC2", "DC3", "DC4", "DC5", "DC6", "DC7");
그러나 성능이 저하됩니다. 아래 코드를 사용해보십시오.
data.AsEnumerable().Distinct(System.Data.DataRowComparer.Default).ToList();
성능을 위해; http://onerkaya.blogspot.com/2013/01/distinct-dataviewtotable-vs-linq.html
var distinctRows = (from DataRow dRow in dtInventory.Rows
select dRow["column_name"] ).Distinct();
var distinctRows = (from DataRow dRow in dtInventory.Rows
select dRow["col1"], dRow["col2"].. ).Distinct();
위의 답변을 향상 시키려면 : dataview의 ToTable 함수에는 "고유 한"플래그가 있습니다.
//This will filter all records to be distinct
dt = dt.DefaultView.ToTable(true);
다음 작품. .NET 3.5 SP1에서 나를 위해 일하고 있습니다.
// Create the list of columns
String[] szColumns = new String[data.Columns.Count];
for (int index = 0; index < data.Columns.Count; index++)
{
szColumns[index] = data.Columns[index].ColumnName;
}
// Get the distinct records
data = data.DefaultView.ToTable(true, szColumns);
방금 이것을 찾았습니다 : http://support.microsoft.com/default.aspx?scid=kb;en-us;326176#1
.net 2.0 과 유사한 것을 찾고있는 동안
DataTable.Select ()를 사용하는 동안 OP가 고유 한 것을 찾고 있다고 가정합니다. (Select ()는 구별을 지원하지 않습니다)
위의 링크 코드는 다음과 같습니다.
class DataTableHelper
{
public DataTable SelectDistinct(string TableName, DataTable SourceTable, string FieldName)
{
DataTable dt = new DataTable(TableName);
dt.Columns.Add(FieldName, SourceTable.Columns[FieldName].DataType);
object LastValue = null;
foreach (DataRow dr in SourceTable.Select("", FieldName))
{
if ( LastValue == null || !(ColumnEqual(LastValue, dr[FieldName])) )
{
LastValue = dr[FieldName];
dt.Rows.Add(new object[]{LastValue});
}
}
return dt;
}
private bool ColumnEqual(object A, object B)
{
// Compares two values to see if they are equal. Also compares DBNULL.Value.
// Note: If your DataTable contains object fields, then you must extend this
// function to handle them in a meaningful way if you intend to group on them.
if ( A == DBNull.Value && B == DBNull.Value ) // both are DBNull.Value
return true;
if ( A == DBNull.Value || B == DBNull.Value ) // only one is DBNull.Value
return false;
return ( A.Equals(B) ); // value type standard comparison
}
}
string[] TobeDistinct = {"Name","City","State"};
DataTable dtDistinct = GetDistinctRecords(DTwithDuplicate, TobeDistinct);
//Following function will return Distinct records for Name, City and State column.
public static DataTable GetDistinctRecords(DataTable dt, string[] Columns)
{
DataTable dtUniqRecords = new DataTable();
dtUniqRecords = dt.DefaultView.ToTable(true, Columns);
return dtUniqRecords;
}
통사론:-
DataTable dt = ds.Tables[0].DefaultView.ToTable(true, "ColumnName");
전의:-
DataTable uniqueCols = dsUDFlable.Tables[0].DefaultView.ToTable(true, "BorrowerLabelName");
가장 간단한 해결책은 LINQ를 사용한 다음 결과를 DataTable로 변환하는 것입니다.
//data is a DataTable that you want to change
DataTable result = data.AsEnumerable().Distinct().CopyToDataTable < DataRow > ();
이것은 asp.net 4.0 ^ Framework에만 유효 하며 Ivan Ferrer Villa가 지적한 것처럼 System.Data.DataSetExtensions에 대한 참조가 필요합니다.
System.Data.DataSetExtensions
DataTable dt = new DataTable("EMPLOYEE_LIST");
DataColumn eeCode = dt.Columns.Add("EMPLOYEE_CODE", typeof(String));
DataColumn taxYear = dt.Columns.Add("TAX_YEAR", typeof(String));
DataColumn intData = dt.Columns.Add("INT_DATA", typeof(int));
DataColumn textData = dt.Columns.Add("TEXT_DATA", typeof(String));
dt.PrimaryKey = new DataColumn[] { eeCode, taxYear };
고유 코드로 간주되는 eecode 및 taxyear로 데이터 테이블을 필터링합니다.
objds.Table1.Select(r => r.ProcessName).AsEnumerable().Distinct();
같은 것?
SELECT DISTINCT .... FROM table WHERE 조건
http://www.felixgers.de/teaching/sql/sql_distinct.html
참고 : 숙제 질문? 신의 축복이있는 Google ..
DataTable dtbs = new DataTable();
DataView dvbs = new DataView(dt);
dvbs.RowFilter = "ColumnName='Filtervalue'";
dtbs = dvbs.ToTable();