studio seleccionar filtrar filas eliminar datos columnas c# select datatable distinct

c# - filtrar - seleccionar columnas en r



Cómo seleccionar distintas filas en una tabla de datos y almacenarlas en una matriz (16)

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


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


La solución más simple es usar linq y luego transformar el resultado en una DataTable

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

Esto es válido para asp.net 4.0 ^ Framework si recuerdo.


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


Para mejorar la respuesta anterior: La función ToTable en dataview tiene un indicador "distinct".

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


Puedes usar así:

data son DataTable

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

pero el rendimiento disminuirá. intente usar el siguiente código:

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

Para el rendimiento; http://onerkaya.blogspot.com/2013/01/distinct-dataviewtotable-vs-linq.html


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


Sintaxis:-

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

EX:-

DataTable uniqueCols = dsUDFlable.Tables[0].DefaultView.ToTable(true, "BorrowerLabelName");



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


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


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


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


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


var ValuetoReturn = (from Rows in YourDataTable.AsEnumerable() select Rows["ColumnName"]).Distinct().ToList();


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