DataTable の目的のデータを持った DataRow が何行目かを取得する

DataTable の目的のデータを持った DataRow が何行目かを取得する方法です。
コードはこんな感じ。

// Key カラムが 0~9 の 10 行のデータを持った DataTable
var dt = new DataTable();
dt.Columns.Add("Key", typeof(int));
Enumerable.Range(0, 10).ToList().ForEach(a => dt.Rows.Add(a));

// 探す対象の Key
var target = 6;

// 対象の Index
var index = dt.Rows.IndexOf(dt.AsEnumerable().Where(a => a.Field<int>(0) == target).FirstOrDefault());

Console.WriteLine(index);

まず、DataTable から LINQ などで目的の DataRow を取り出します。
ここでは普通に Where メソッドで取得しています。
取得した DataRow を DataTable の Rows の IndexOf メソッドに渡します。
これで、インデックスが取得できます。

IndexOf の引数は null でも構わない(-1 を返してくれる)ので、特に null 判定などは不要で、FirstOrDefault の結果を入れてやれば OK です。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

w

%s と連携中