私はある条件下で私のデータテーブルからSelect *
に戻り、戻り値を同じデータテーブルに入れたいと思います。いくつかの条件の下でデータテーブルからすべてを選択する方法は?
dt = from myRow in dt.AsEnumerable()
where !string.IsNullOrEmpty(myRow.Field<string>("name"))
select ;
私は上記のようなものを試します。
私はある条件下で私のデータテーブルからSelect *
に戻り、戻り値を同じデータテーブルに入れたいと思います。いくつかの条件の下でデータテーブルからすべてを選択する方法は?
dt = from myRow in dt.AsEnumerable()
where !string.IsNullOrEmpty(myRow.Field<string>("name"))
select ;
私は上記のようなものを試します。
あなたのコードから見ることができるのは、「名前」フィールドが空の行をすべて削除することです。あれは正しいですか?
あなたが戻った結果は、あなたの新しいデータテーブルではありません。代わりに、表示したいすべての行を含むIEnumerable<DataRow>
が表示されます。
代わりに、好きではないものがすべて含まれているlinqクエリの結果を元に戻すことができます。その後、すべてのデータをデータテーブルから単純に削除します。
var rowsToDelete = dt.AsEnumerable()
.Where(row => String.IsNullOrEmpty(row.Field<string>("name"))
.ToList();
foreach(var row in rowsToDelete)
{
dataTable.Rows.Remove(row);
}
非NULL値を持つ新しいオブジェクトを作成します。
DataTable dt2 = new DataTable();
dt.AsEnumerable().Where(row => !row.IsNull("name")).Select(row => { dt2.Rows.Add(row); return true; });
は、既存のオブジェクトからNULL値を削除します
dt.AsEnumerable().Where(row => row.IsNull("name")).Select((row, index) => { dt.Rows.RemoveAt(index); return true; });
は、既存のオブジェクトを変更します:
dt.AsEnumerable().Where(row => row.IsNull("name")).Select((row, index) =>
{
System.Diagnostics.Debug.WriteLine("Name in Row # " + index + " is null.");
row["Status"] = "Disabled";
return true;
});
私が 'dt.Rows.Clear();'を実行すると 'この行はテーブルから削除されており、データはありません。 'rowsToDelete'の中で' BeginEdit()はこの行に新しいデータを作成することができます ' –
@just_name:はい、私はそれをテストしませんでした(私には恥じました)と単純なコピー(' .ToList() ')すべての単純なリストのようにdatatableで動作します。しかし、それは真実ではありません。だから私は単に私の答えからこのアプローチを削除し、後者のアプローチだけを使用することをお勧めします。 – Oliver