2012-04-25 18 views
6

データセットからデータテーブルにデータをフィルタリングするにはどうすればよいですか? >データセットからフィルタリングされたデータをデータテーブルに取得する

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

どのように私はここにDataTableを使用することができますコード - などの ?コードdoesnの `t以下

はchanges-を反映>

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

です「(+ FilteredDataD.column "を芸名= '開発' AND DEVLAPSEDAYSがNULLでない" のように、フィルタの上使用して列を削除することが可能ですcol_name ")... 5列に4個しか表示されていないとします。私のquery.Isからcol_nameを削除できません。 (C#を使用して3)あなたが拡張メソッドを書くことができ

返信

答えて

11

は、代わりにLINQを使用してみてください:

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

EDITは構文精度のためにAsDataView()AsDataViewを変更しました。
EDIT提供.NET 2.0対応ソリューション

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()は私のVSで見つけることができませんでした.net 2.0 version.Reply – palak

+0

@JamesJohnson +1、私は「ビュー」がデータセットなどに使われているのを気にしませんでした。これは素晴らしい解決策です。 – Matt

+0

@JamesJohnson:こんにちはジェームズは答えに感謝しますが、それは私のために働いていない、フィルタリングは起こっていません。 – palak

6

好きは次のとおりです。

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

を次のようにそれを使用します。

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

を更新、あなたはC#2.0を使用していると言っています(したがって、拡張メソッドとLINQのaren 「Tオプション)あなたの代わりにこれを使用することができます:

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

マット、返事のおかげで、I'mは、C#2.0 .. – palak

+0

@palakを使用してToListメソッドのための参照()、i'mを見つけていない、私の答えを更新しました。 – Matt

+0

@Matt:あなたの最初の答えは、 'DataTable.DefaultView.RowFilter'が何をするかについてのラウンドアバウトな方法です。 –