[C#] Cómo seleccionar distintas filas en una tabla de datos y almacenarlas en una matriz


Answers

Seguir una sola línea de código evitará las filas duplicadas de una DataTable :

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

Dónde:

  • primer parámetro en ToTable() es un booleano que indica si desea filas distintas o no.

  • El segundo parámetro en ToTable() es el nombre de la columna en función del cual debemos seleccionar distintas filas. Solo estas columnas estarán en la tabla de datos devuelta.

Lo mismo se puede hacer desde un DataSet , al acceder a una DataTable específica:

dataSet.Tables["Employee"].DefaultView.ToTable(true, "employeeid");
Question

Tengo un objds de conjunto de datos. objds contiene una tabla llamada Tabla1. Table1 contiene la columna llamada ProcessName. Este ProcessName contiene nombres repetidos. Por lo tanto, quiero seleccionar solo nombres distintos. Esto es posible.

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



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();






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 };

Filtra la tabla de datos con eecode y taxyear considerados conjuntamente como únicos




Los siguientes trabajos Lo tengo trabajando para mí con .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);



Me acabo de encontrar esto: http://support.microsoft.com/default.aspx?scid=kb;en-us;326176#1

Mientras busca algo similar, solo, específicamente para .net 2.0

Supongo que el OP estaba buscando distinto mientras usaba DataTable.Select (). (Select () no es compatible con distinct)

Así que aquí está el código del enlace de arriba:

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
    }
}



DataTable dtbs = new DataTable(); 
DataView dvbs = new DataView(dt); 
dvbs.RowFilter = "ColumnName='Filtervalue'"; 
dtbs = dvbs.ToTable();



Con 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); }



Links