2012-04-25 6 views
6

Wie kann ich Daten von Dataset zu Datentabelle filtern? wie die Code->Get gefilterte Daten von Dataset zu Datentabelle

DataRow[] dr = DS.Tables[0] 
    .Select("STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL");   

Wie kann ich hier Datatable?

folgenden Code doesn `t Änderungen- reflektieren>

DataTable FilteredDataD = DS.Tables[0]; 
if (FilteredDataD.Rows.Count > 0) { 
    FilteredDataD.DefaultView.RowFilter = "STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL"; 
    FilteredDataD.DefaultView.ToTable(); 
} 

Ist ist möglich, eine Spalte über Filter zu entfernen, wie "stagename = 'Develop' AND DEVLAPSEDAYS IS NOT NULL" + FilteredDataD.column (“ col_name ") ... Angenommen, ich habe 5 Spalten, die nur 4 anzeigen, kann col_name nicht aus meiner Abfrage entfernen. Gibt es einen Weg?

Antworten

Antwort

11

statt mit LINQ Versuchen:

var table = DS.Tables[0].AsEnumerable().Where(
    r => r.Field<string>("STAGENAME") == "Develop" && r.Field<int?>("DEVLAPSEDAYS").HasValue).AsDataView().ToTable(); 

EDIT geändert AsDataView-AsDataView() für syntaktische Richtigkeit.
EDIT .NET 2.0-kompatible Lösung bereitgestellt

DataTable table = DS.Tables[0]; 
if (table.Rows.Count > 0) 
{ 
    table.DefaultView.RowFilter = "STAGENAME = 'DEVELOP' AND DEVLAPSEDAYS IS NOT NULL"; 
    table = table.DefaultView.ToTable(); 
} 
+0

James, AsEnumerable() konnte nicht in meinem VS finden, ich benutze .net 2.0 version.Reply – palak

+0

@JamesJohnson +1, ich wan't bewusst "Ansichten" auf Datensätze und so verwendet wird. Dies ist eine nette Lösung. – Matt

+0

@JamesJohnson: Hallo James Danke für die Antwort, aber das funktioniert nicht für mich, Filterung ist nicht passiert. – palak

6

Sie eine Erweiterungsmethode schreiben könnte (unter Verwendung von C# 3) wie folgt:

public static DataTable Filter(this DataTable dataTable, string selectFilter) 
{ 
    var filteredTable = dataTable.Clone(); 
    var rows = dataTable.Select(selectFilter).ToList(); 
    rows.ForEach(filteredTable.ImportRow); 
    return filteredTable; 
} 

es dann wie verwenden folgt:

DataTable dataTable = DS.Tables[0] 
    .Filter("STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL"); 

aktualisieren, seit du gesagt hast, dass du C# 2.0 verwendest (und damit Erweiterungsmethoden und LINQ aren ‚T eine Option) Sie könnte stattdessen verwenden:

public static DataTable GetFilteredTable(
    DataTable sourceTable, string selectFilter) 
{ 
    var filteredTable = sourceTable.Clone(); 
    var rows = sourceTable.Select(selectFilter); 
    foreach (DataRow row in rows) 
    { 
     filteredTable.ImportRow(row); 
    } 
    return filteredTable; 
} 

DataTable dataTable = GetFilteredTable(
    DS.Tables[0], "STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL"); 
+0

Matt, Danke für die Antwort, I'm für ToList nicht Bezug zu finden(), i'm C# 2.0 .. – palak

+0

@palak verwenden, meine Antwort aktualisiert . – Matt

+0

@Matt: Ihre erste Antwort ist ein Umweg, was "DataTable.DefaultView.RowFilter" tut. –

Verwandte Themen