我有一个数据集objds。objds包含一个名为Table1的表。表1包含名为ProcessName的列。这个ProcessName包含重复的名称。所以我只想选择不同的名称。
intUniqId[i] = (objds.Tables[0].Rows[i]["ProcessName"].ToString());
我有一个数据集objds。objds包含一个名为Table1的表。表1包含名为ProcessName的列。这个ProcessName包含重复的名称。所以我只想选择不同的名称。
intUniqId[i] = (objds.Tables[0].Rows[i]["ProcessName"].ToString());
Answers:
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()
单行代码将避免a的重复行DataTable
:
dataTable.DefaultView.ToTable(true, "employeeid");
哪里:
in ToTable()
中的第一个参数是一个布尔值,它指示您是否要使用不同的行。
中的第二个参数ToTable()
是列名,我们必须根据该列名选择不同的行。仅这些列将在返回的数据表中。
可以DataSet
通过访问特定对象,从中进行以下操作DataTable
:
dataSet.Tables["Employee"].DefaultView.ToTable(true, "employeeid");
DefaultView
属性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函数具有“ distinct”标志。
//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;zh-cn;326176#1
寻找类似的东西时,仅适用于.net 2.0
我假设OP在使用DataTable.Select()时正在寻找不同的对象。(Select()不支持distinct)
所以这是上面链接的代码:
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;
}
最简单的解决方案是使用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的数据表组合起来视为唯一的数据表
这很容易
DataView view = new DataView(dt);
DataTable dt2 = view.ToTable(true, "Column1", "Column2","Column3", ...,"ColumnNth");
和dt2数据表包含column1,Column2..ColumnNth唯一数据。
objds.Table1.Select(r => r.ProcessName).AsEnumerable().Distinct();
像什么?
SELECT DISTINCT .... FROM表在哪里条件
http://www.felixgers.de/teaching/sql/sql_distinct.html
注意:家庭作业有问题吗?和上帝保佑谷歌..
DataTable dtbs = new DataTable();
DataView dvbs = new DataView(dt);
dvbs.RowFilter = "ColumnName='Filtervalue'";
dtbs = dvbs.ToTable();