如何在数据表中select不同的行并存储到数组中
我有一个数据集objds。 objds包含一个名为Table1的表。 表1包含名为ProcessName的列。 此ProcessName包含重复的名称。所以我想只select不同的名称。这是可能的。
intUniqId[i] = (objds.Tables[0].Rows[i]["ProcessName"].ToString());
DataView view = new DataView(table); DataTable distinctValues = view.ToTable(true, "Column1", "Column2" ...);
以下单行代码将避免重复的DataTable
行:
dataTable.DefaultView.ToTable(true, "employeeid");
哪里:
-
ToTable()
中的第一个参数是一个布尔值 ,表示您是否需要不同的行。 -
ToTable()
中的第二个参数是我们必须select不同行的列名。 只有这些列将在返回的数据表中。
通过访问特定的DataTable
,可以从DataSet
完成相同的操作:
dataSet.Tables["Employee"].DefaultView.ToTable(true, "employeeid");
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();
使用LINQ(.NET 3.5,C#3)
var distinctNames = ( from row in DataTable.AsEnumerable() select row.Field<string>("Name")).Distinct(); foreach (var name in distinctNames ) { Console.WriteLine(name); }
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();
你可以这样使用:
data
是DataTable
data.DefaultView.ToTable(true, "Id", "Name", "Role", "DC1", "DC2", "DC3", "DC4", "DC5", "DC6", "DC7");
但performance会下降。 尝试使用下面的代码:
data.AsEnumerable().Distinct(System.Data.DataRowComparer.Default).ToList();
性能; http://onerkaya.blogspot.com/2013/01/distinct-dataviewtotable-vs-linq.html
为了改善上述答案:dataview上的ToTable函数有一个“不同的”标志。
//This will filter all records to be distinct dt = dt.DefaultView.ToTable(true);
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; }
以下作品。 我用.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);
我碰巧find这个: http : //support.microsoft.com/default.aspx?scid=kb;en-us;326176#1
在寻找类似的东西的时候, 特别是.net 2.0
我假设OP正在寻找不同的同时使用DataTable.Select()。 (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 } }
像是?
SELECT DISTINCT …. FROM表WHERE条件
http://www.felixgers.de/teaching/sql/sql_distinct.html
注:作业问题? 上帝保佑谷歌
var ValuetoReturn = (from Rows in YourDataTable.AsEnumerable() select Rows["ColumnName"]).Distinct().ToList();
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组合认为是独一无二的
句法:-
DataTable dt = ds.Tables[0].DefaultView.ToTable(true, "ColumnName");
EX: –
DataTable uniqueCols = dsUDFlable.Tables[0].DefaultView.ToTable(true, "BorrowerLabelName");
DataTable dtbs = new DataTable(); DataView dvbs = new DataView(dt); dvbs.RowFilter = "ColumnName='Filtervalue'"; dtbs = dvbs.ToTable();