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");
algo así?
SELECCIONE DISTINCT .... FROM table WHERE condition
http://www.felixgers.de/teaching/sql/sql_distinct.html
nota: ¿Pregunta sobre la tarea? y Dios bendiga a Google ...
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();