首页 文章

如何选择数据表中的不同行并存储到数组中

提问于
浏览
153

我有一个数据集objds . objds包含一个名为Table1的表 . Table1包含名为ProcessName的列 . 这个ProcessName包含重复的名称 . 所以我想只选择不同的名称 . 这是可能的 .

intUniqId[i] = (objds.Tables[0].Rows[i]["ProcessName"].ToString());

18 回答

  • 136

    这很容易

    DataView view = new DataView(dt);
    DataTable dt2 = view.ToTable(true, "Column1", "Column2","Column3", ...,"ColumnNth");
    

    和dt2 datatable包含column1,Column2..ColumnNth唯一数据 .

  • 1
    objds.Table1.Select(r => r.ProcessName).AsEnumerable().Distinct();
    
  • 9
    DataTable dtbs = new DataTable(); 
    DataView dvbs = new DataView(dt); 
    dvbs.RowFilter = "ColumnName='Filtervalue'"; 
    dtbs = dvbs.ToTable();
    
  • 0
    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结合起来视为唯一

  • -1

    最简单的解决方案是使用linq,然后将结果转换为DataTable

    //data is a DataTable that you want to change
        DataTable result = data.AsEnumerable().Distinct().CopyToDataTable < DataRow > ();
    

    如果我记得这对asp.net 4.0 ^ Framework有效 .

  • -2
    DataView view = new DataView(table);
    DataTable distinctValues = view.ToTable(true, "Column1", "Column2" ...);
    
  • 2

    单行代码将避免 DataTable 的重复行:

    dataTable.DefaultView.ToTable(true, "employeeid");
    

    哪里:

    _2961122_中的

    • 第一个参数是 boolean ,表示您是否需要不同的行 .

    ToTable() 中的

    • 第二个参数是列名,我们必须根据该名称选择不同的行 . 只有这些列将在返回的数据表中 .

    通过访问特定的 DataTable ,可以从 DataSet 完成相同的操作:

    dataSet.Tables["Employee"].DefaultView.ToTable(true, "employeeid");
    
  • 2
    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();
    
  • 1

    使用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); }
    
  • 13

    你可以这样使用:

    dataDataTable

    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

  • 15
    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();
    
  • 4

    为了改进上面的答案:dataview上的ToTable函数有一个“distinct”标志 .

    //This will filter all records to be distinct
    dt = dt.DefaultView.ToTable(true);
    
  • 3

    以下作品 . 我使用.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);
    
  • 0

    我碰巧发现了这个:http://support.microsoft.com/default.aspx?scid=kb;en-us;326176#1

    在寻找类似的东西时,只有 specifically for .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
        }
    }
    
  • 0
    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;
    }
    
  • 29

    句法:-

    DataTable dt = ds.Tables[0].DefaultView.ToTable(true, "ColumnName");
    

    EX: -

    DataTable uniqueCols = dsUDFlable.Tables[0].DefaultView.ToTable(true, "BorrowerLabelName");
    
  • 55
    var ValuetoReturn = (from Rows in YourDataTable.AsEnumerable()
    select Rows["ColumnName"]).Distinct().ToList();
    
  • 338

相关问题