web-dev-qa-db-fra.com

How to the distinct of lines in the data

J'ai un jeu de données objds. objds contient une table nommée Table1. Table1 contient la colonne nommée ProcessName. Ce ProcessName contient des noms répétés.Alors je veux sélectionner uniquement des noms distincts.Est-ce possible.

  intUniqId[i] = (objds.Tables[0].Rows[i]["ProcessName"].ToString());
152
Ahmed
DataView view = new DataView(table);
DataTable distinctValues = view.ToTable(true, "Column1", "Column2" ...);
335
Thomas Levesque

Le fait de suivre une seule ligne de code évite les doublons d'une DataTable:

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

Où:

  • le premier paramètre dans ToTable() est un boolean qui indique si vous voulez des lignes distinctes ou non.

  • le deuxième paramètre dans 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'une DataSet, en accédant à une DataTable spécifique:

dataSet.Tables["Employee"].DefaultView.ToTable(true, "employeeid");
136
Rahul
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
Martin Moser

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); }
29
Zain Ali

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 la performance; http://onerkaya.blogspot.com/2013/01/distinct-dataviewtotable-vs-linq.html

15
onerkaya
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
ces2601

Pour améliorer la réponse ci-dessus: La fonction ToTable sur l'affichage de données a un indicateur "distinct". 

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

Travaux suivants. Je le travaille 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
Vijay Balani

Il m'est arrivé de trouver ceci: http://support.Microsoft.com/default.aspx?scid=kb;en-us;326176#1

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

En supposant que l'OP cherche distinct tout en utilisant DataTable.Select (). (Select () ne supporte pas distinct)

Alors voici 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
    }
}
3
gideon

Syntaxe:-

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

EX:- 

DataTable uniqueCols = dsUDFlable.Tables[0].DefaultView.ToTable(true, "BorrowerLabelName");
2
user3639409
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
Tanmay Nehete
var ValuetoReturn = (from Rows in YourDataTable.AsEnumerable()
select Rows["ColumnName"]).Distinct().ToList();
1
Dylan
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 considérés ensemble comme uniques

1
Viswa Teja Kuncham

La solution la plus simple consiste à utiliser linq puis à 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 valable Pour asp.net 4.0 ^ Framework Si je me souviens bien.

0
Davide Castronovo
objds.Table1.Select(r => r.ProcessName).AsEnumerable().Distinct();
0
Gál Gyula

c'est facile

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

et dt2 datatable contiennent les données uniques column1, Column2..ColumnNth.

0
Manish Singh