0

Color列のあるテーブルがあるとしましょう。色にはさまざまな値があります。特定の列のアイテムを一度に処理できるC#メソッドがあります。したがって、私はしたいと思います:

foreach(colorname in mytable.getDistinctColornames)
   monocolorMethod(mytable.getSubTableOnlyContainingRowsWithColor(colorname))

どうすればそれをエレガントに行うことができますか...?

とにかく、私はデータを前後にコピーすることを避けます。データテーブルについての見方をお願いします。特定の列の行のみを「表示」するビューと「書き込み可能な」ビュー(つまり、フィルター処理されたサブセットに書き込むと、元のテーブルが書き込まれます)

編集 :

「Car」テーブルがあり、すべての車の「Type」列の「Sedan」を「Truck」に置き換えて「Color=Red」にしたいとします。

次のコードを指定するにはどうすればよいですか?

DataTable cars (...); // the data

DataView dv = cars.DefaultView;
dv.RowFilter = "Color='Red'";

<ここでは、DataViewでループしたいと思います>。次のコードは機能しません:

foreach (row in dv.AsEnumerable)
{
  if(row["Type"] == "Sedan")
    row["Type"] = "Truck";
}

編集2:

このhttp://msdn.microsoft.com/fr-fr/library/system.data.dataview.allowedit.aspxを見つけました。

view.AllowEdit = true;
view[0].BeginEdit();
view[0]["FirstName"] = "Mary";
view[0]["LastName"] = "Jones";
view[0].EndEdit();
4

2 に答える 2

2

これをチェックしてください:

データセットのクエリ–LINQからDataSetの概要

于 2012-07-04T17:44:05.697 に答える
1

DataViewクラスを使ってみましたか?LINQを使用せずに達成したいこととまったく同じように見えます:http://msdn.microsoft.com/en-us/library/fdcwwhez

使用例:

4行のDataTable名前のオブジェクトがあるとします。_dt

_dt = new DataTable("") {Columns = {new DataColumn("ID"), new DataColumn("Name"), new DataColumn("Order")}};
_dt.Rows.Add(1, "one", 1);
_dt.Rows.Add(2, "two", 3);
_dt.Rows.Add(3, "three", 2);
_dt.Rows.Add(4, "four", 5);

データをフィルタリングせずに並べ替え操作を実行するDataViewを簡単に作成できます。

_dv = new DataView(_dt, "", "Order, Name", DataViewRowState.CurrentRows);

に新しい行を追加することもできます。DataViewこれは、対応するように設定されているためDataTable、新しい行がオブジェクトに直接追加され_dtます。DataView並べ替え順序も更新され、新しい行は([順序]列と[名前]列で並べ替えが行われるため)内の最後の行にはなりません。

var newRow = _dv.AddNew();
newRow["ID"] = 5;
newRow["Name"] = "five";
newRow["Order"] = 4;
newRow.EndEdit();

そのコードの後、に5行あり_dtます。行の編集も非常に簡単です。

var editedRow = _dv[0];
editedRow.BeginEdit();
editedRow["Name"] = "Test";
editedRow.EndEdit();

DataView.Find()またはDataView.FindRows()メソッドを使用して、内の行を検索することもできますDataView

于 2012-07-04T17:46:00.457 に答える