it-swarm.com.de

So wählen Sie verschiedene Zeilen in einer Datentabelle aus und speichern sie in einem Array

Ich habe ein Datensatzobjekt. objds enthält eine Tabelle mit dem Namen Table1. Table1 enthält eine Spalte mit dem Namen ProcessName. Dieser Prozessname enthält sich wiederholende Namen. Ich möchte nur bestimmte Namen auswählen. Ist dies möglich?.

  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

Die folgende einzelne Codezeile vermeidet die doppelten Zeilen einer DataTable:

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

Woher:

  • der erste Parameter in ToTable() ist ein boolean , der angibt, ob bestimmte Zeilen gewünscht werden oder nicht.

  • der zweite Parameter in ToTable() ist der Spaltenname, auf dessen Grundlage verschiedene Zeilen ausgewählt werden müssen. Nur diese Spalten werden in der zurückgegebenen Datentabelle angezeigt. 

Dasselbe kann von einer DataSet aus getan werden, indem auf eine bestimmte DataTable zugegriffen wird:

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

Mit 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

Sie können so verwenden:

data ist DataTable

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

aber die Leistung wird sinken. Versuchen Sie, den folgenden Code zu verwenden:

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

Für Leistung; 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

So verbessern Sie die obige Antwort: Die ToTable-Funktion in der Datenansicht hat ein "eindeutiges" Flag. 

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

Folgende Arbeiten. Ich habe es mit .NET 3.5 SP1 für mich arbeiten

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

Ich habe gerade zufällig Folgendes gefunden: http://support.Microsoft.com/default.aspx?scid=kb;en-us;326176#1

Bei der Suche nach etwas Ähnlichem nur speziell für .net 2.0

Ich gehe davon aus, dass das OP während der Verwendung von DataTable.Select () eindeutig gesucht wurde. (Select () unterstützt nicht eindeutig)

Hier ist also der Code aus dem obigen Link:

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

Syntax:-

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

Es filtert die Datentabelle mit eecode und taxyear, die als einzigartig betrachtet werden

1

Die einfachste Lösung ist linq und wandelt das Ergebnis in eine DataTable .__ um.

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

Dies gilt Für asp.net 4.0 ^ Framework , Wenn ich mich erinnere.

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

es ist leicht

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

und dt2 datatable enthalten column1, Column2..ColumnNth eindeutige Daten.

0
Manish Singh