C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: DataTable の指定列名で検索する方法


(過去ログ 137 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■80690 / inTopicNo.1)  DataTable の指定列名で検索する方法
  
□投稿者/ 太陽 (1回)-(2016/08/03(Wed) 11:49:34)

分類:[.NET 全般] 

タイトル通りですが、
c# にてDataTable の指定列名で検索し、その行数を取得する方法を教えてください。

現在は DataTab dt が存在していて以下のようにループを回しています。

int index = 0;
for(; index < dt.Rows.Count; index++) {
 if(dt.Rows[index]["指定列名"].ToString() == "検索文字列") break;
}

ループを回して取得する方法以外で、Search や LinQ 等の他の方法を教えてください。


引用返信 編集キー/
■80691 / inTopicNo.2)  Re[1]: DataTable の指定列名で検索する方法
□投稿者/ Hongliang (444回)-(2016/08/03(Wed) 13:35:01)
行数? お書きのコードでは最初に見つかった行インデックスを取得しているように見えますが…?

LINQだとこんな感じでしょうか。
// 行インデックス
int index = dt.AsEnumerable()
    .Select((_row, _i) => new { Row = _row, Index = _i })
    .FirstOrDefault(_row => _row.Row.Field<string>("列名") == "検索文字列")
    ?.Index ?? -1; // 存在しなかったら-1
// 行数
int count = dt.AsEnumerable()
    .Count(_row => _row.Field<string>("列名") == "検索文字列");

なお、"?."演算子はC#6(VS2015)以降で使用できるものです。

ところで、なぜ「ループを回して取得する方法以外」なんでしょうか?

引用返信 編集キー/
■80692 / inTopicNo.3)  Re[2]: DataTable の指定列名で検索する方法
□投稿者/ PANG2 (133回)-(2016/08/03(Wed) 13:49:54)
int count = dt.Select("指定列名=検索文字列").Length;
引用返信 編集キー/
■80693 / inTopicNo.4)  Re[3]: DataTable の指定列名で検索する方法
□投稿者/ 太陽 (2回)-(2016/08/03(Wed) 14:09:32)
No80692 (PANG2 さん) に返信
> int count = dt.Select("指定列名=検索文字列").Length;

これって該当する個数が出てくるんじゃないですか?
欲しいのはDataTableの何行目にあるかを知りたいのですが。
引用返信 編集キー/
■80694 / inTopicNo.5)  Re[1]: DataTable の指定列名で検索する方法
□投稿者/ PANG2 (134回)-(2016/08/03(Wed) 14:23:17)
2016/08/03(Wed) 14:32:38 編集(投稿者)

> c# にてDataTable の指定列名で検索し、その行数を取得する方法を教えてください。

行数ではなく、行番号?

最初の案が最善でしょう。
LINQでかっこ良く書いてもやっていることは同じ。
それでも、あえて一行で書きたいというのが題意か。

C#2.0なら

int index = Array.FindIndex(dt.Select(), delegate(DataRow dr) { return dr["指定列名"].ToString() == "検索文字列"; });


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -