Comment sélectionner des lignes distinctes dans un datatable et stocker dans un tableau

J'ai un ensemble de données objds. objds contient une table nommée Table1. Table1 contient une colonne nommée ProcessName. This ProcessName contains repeated names.So je veux sélectionner seulement distinct names.Is c'est possible.

  intUniqId[i] = (objds.Tables[0].Rows[i]["ProcessName"].ToString());
148
demandé sur adinas 2009-07-29 14:03:51

17 réponses

DataView view = new DataView(table);
DataTable distinctValues = view.ToTable(true, "Column1", "Column2" ...);
327
répondu Thomas Levesque 2009-07-29 12:37:51

Suivre une seule ligne de code évitera les lignes en double d'un DataTable:

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

Où:

  • Le premier paramètre de ToTable() est un booléen {[15] } qui indique si vous voulez des lignes distinctes ou non.

  • Le deuxième paramètre du ToTable() est le nom de la colonne sur la base duquel nous devons sélectionner des lignes distinctes. Seules ces colonnes seront dans le datatable retourné.

La même chose peut être faite à partir d'un DataSet, en accédant à un DataTable:

dataSet.Tables["Employee"].DefaultView.ToTable(true, "employeeid");
134
répondu Rahul 2015-05-26 11:38:44
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();
55
répondu Martin Moser 2009-07-29 10:14:51

Avec 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); }
28
répondu Humble Coder 2011-07-29 05:51:47

Vous pouvez utiliser comme ça:

data est DataTable

data.DefaultView.ToTable(true, "Id", "Name", "Role", "DC1", "DC2", "DC3", "DC4", "DC5", "DC6", "DC7");  

Mais la performance sera en baisse. essayez d'utiliser le code ci-dessous:

data.AsEnumerable().Distinct(System.Data.DataRowComparer.Default).ToList();  

Pour les performances; http://onerkaya.blogspot.com/2013/01/distinct-dataviewtotable-vs-linq.html

15
répondu onerkaya 2013-04-07 14:12:59
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();
13
répondu ces2601 2012-10-19 23:33:08

Pour améliorer la réponse ci-dessus: la fonction ToTable sur dataview a un drapeau "distinct".

//This will filter all records to be distinct
dt = dt.DefaultView.ToTable(true);
8
répondu Ravedave 2009-08-26 19:40:02

Travaux suivants. Je l'ai travailler pour moi avec. 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);
4
répondu Vijay Balani 2017-07-02 11:41:22
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;
}
2
répondu Tanmay Nehete 2016-05-03 16:17:52

Je viens de trouver ce qui s'est passé: http://support.microsoft.com/default.aspx?scid=kb; EN-us;326176#1

Tout en recherchant quelque chose de similaire, seulement, spécifiquement pour. net 2.0

Je suppose que L'OP cherchait distinct tout en utilisant DataTable.Sélectionner(). (Select () ne supporte pas distinct)

Voici donc le code du lien ci-dessus:

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
    }
}
2
répondu gideon 2017-07-02 11:41:47
var ValuetoReturn = (from Rows in YourDataTable.AsEnumerable()
select Rows["ColumnName"]).Distinct().ToList();
1
répondu Siyavash 2012-09-04 07:36:43
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 };

Il filtre la table de données avec eecode et taxyear combinés considérés comme uniques

1
répondu Viswa Teja Kuncham 2016-05-03 16:17:31

Syntaxe:-

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

EX: -

DataTable uniqueCols = dsUDFlable.Tables[0].DefaultView.ToTable(true, "BorrowerLabelName");
1
répondu user3639409 2016-05-03 16:18:04

La solution la plus simple est d'utiliser linq, puis de transformer le résultat en un DataTable

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

Ceci est valide pour asp.net 4.0 ^ cadre si je me rappelle.

0
répondu Davide Castronovo 2018-01-31 14:30:28

C'est facile

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

Et DT2 datatable contiennent column1, Column2..ColumnNth données uniques.

0
répondu Manish Singh 2018-08-16 10:05:28

Sthing comme ?

SÉLECTIONNEZ DISTINCT .... De la table où condition

Http://www.felixgers.de/teaching/sql/sql_distinct.html

Remarque: Question de devoirs ? et que dieu bénisse google..

Http://www.google.com/search?hl=en&rlz=1C1GGLS_enJO330JO333&q=c%23+selecting+distinct+values+from+table&aq=f&oq=&aqi=

-1
répondu Madi D. 2009-07-29 10:14:22
DataTable dtbs = new DataTable(); 
DataView dvbs = new DataView(dt); 
dvbs.RowFilter = "ColumnName='Filtervalue'"; 
dtbs = dvbs.ToTable();
-1
répondu Packiyaraj Shanmugam 2017-07-07 10:30:03