The road to C# master trapemiya

C#を中心に、.NETの話題を取り上げます。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  256  : 記事  1  : コメント  10763  : トラックバック  30

ニュース

Since 2005年10月26日

わんくま同盟

わんくま同盟

Microsoft MVP


Visual Developer - Visual C#

記事カテゴリ

書庫

日記カテゴリ

データテーブルからレコードを抽出する際に、例えば以下のようなコードを書くと思う。

var drs = from dt in hogeDataSet.hogeDataTable.AsEnumerable()
       where (dt.Field<string>("cdColumn") == cd)
       select dt;

foreach (hogeDataSet.hogeDataTableRow dr in drs)
{
   ・
   ・
   ・
}

だがしかし、データテーブルがコードマスターのような機能をしており、常に1件しかレコードを読まないとしたらどうであろうか?
なんとなくforeachは使いたくない。だって1件しかないことがわかっているんですもの。
で、以下のように書いてみた。

var drs = from dt in hogeDataSet.hogeDataTable.AsEnumerable()
       where (dt.Field<string>("cdColumn") == cd)
       select dt;

IEnumerator<hogeDataSet.hogeDataTableRow> enumerator = drs.GetEnumerator();
enumerator.MoveNext();
hogeDataSet.hogeDataTableRow dr = (hogeDataSet.hogeDataTableRow)enumerator.Current;

・・・。どちらがいいか微妙だ・・・。でもやっぱりforeachかな? たまたま1レコードしかない場合だよと割り切るのが正解のような気がする。でも、IEnumeratorを使った下の書き方だとソースコードから1レコードしかないことが読み取れるし・・・。
ちょっと悩んでます。
もしくはADO.NETのExecuteScalar()のようなメソッドを、上記のIEnumeratorを用いて用意しちゃえばいいかな?

LINQを使って他に良い方法があれば教えて下さい。

あと、C# 3.0に対応したソースコードをカラー化してブログとかに張り付けられるようなツールをどなたか紹介して下さい。m(_ _)m

投稿日時 : 2008年1月31日 12:23

コメント

# re: LINQを使ってデータテーブルから1レコードのみ抽出する時 2008/01/31 12:39 NyaRuRu
Enumerable.First とか Enumerable.FirstOrDefault とか Enumerable.Single とか Enumerable.SingleOrDefault が欲しいって話ですか?

# re: LINQを使ってデータテーブルから1レコードのみ抽出する時 2008/01/31 12:41 NyaRuRu
>C# 3.0に対応したソースコードをカラー化してブログとかに張り付けられるようなツール

kazuki さんが紹介されていたこれ使いやすそげですね.
http://blogs.wankuma.com/kazuki/archive/2008/01/02/115804.aspx

# re: LINQを使ってデータテーブルから1レコードのみ抽出する時 2008/01/31 12:44 えムナウ
>あと、C# 3.0に対応したソースコードをカラー化してブログとかに張り付けられるようなツールをどなたか紹介して下さい。m(_ _)m
私はVisualStudioからコピーしてワードに貼り付け、ワードからコピーしてWindowsLiveWriterに張り付けています。

# re: LINQを使ってデータテーブルから1レコードのみ抽出する時 2008/01/31 12:48 かるあ
一件あるかどうかわからない場合は SingleOrDefault あたりうれしいかも

# re: LINQを使ってデータテーブルから1レコードのみ抽出する時 2008/01/31 12:52 えムナウ
>SyntaxHighlighter
色がVisualStudioと違うのが気に入らない。
>ワード経由
改行がpタグなのが気に入らない。

# re: LINQを使ってデータテーブルから1レコードのみ抽出する時 2008/01/31 13:44 trapemiya
>>NyaRuRuさん
>Enumerable.First とか Enumerable.FirstOrDefault とか Enumerable.Single とか Enumerable.SingleOrDefault が欲しいって話ですか?

が~ん・・・。using System.Linq; が無かったためにインテリセンスに出てこなかったorz なぜ、デフォルトでusing System.Linq;を付けてくれないんだろう?>VS2008 C#
無知がバレてしまいましたね(^^;

hogeDataSet.hogeDataTableRow dr = (hogeDataSet.hogeDataTableRow)dr.First();

これだけでOK。満足です。ありがとうございました。

>>かるあさん
>一件あるかどうかわからない場合は SingleOrDefault あたりうれしいかも

ありがとうございます。いま、LINQを使いながら某業務アプリケーションを作成中なんで、いろいろ手探り状態です。レベルは低いです。(^^;

>>えムナウさん
>私はVisualStudioからコピーしてワードに貼り付け、ワードからコピーしてWindowsLiveWriterに張り付けています。

なるほど。ワードを経由させるわけですね。ツールばかり探していました。
頭が固くなっているようです。
ところでNyaRuRuさんのご紹介にもありましたけど、WindowsLiveWriterをみなさんお使いなんですね。わんくまブログでは使えないと思っていたんですが使えるんですね。時間ができたら調べてみます。ありがとうございました。

# re: LINQを使ってデータテーブルから1レコードのみ抽出する時 2008/01/31 13:47 trapemiya
>>どっとねっとふぁんさん

ご紹介ありがとうございます。
LINQって目玉機能なのに、どうして、
using System.Linq;
を自動で付けてくれないの~!

# re: LINQを使ってデータテーブルから1レコードのみ抽出する時 2008/01/31 13:51 NyaRuRu
>なぜ、デフォルトでusing System.Linq;を付けてくれないんだろう?

うちはデフォルトで付いてますね.

# re: LINQを使ってデータテーブルから1レコードのみ抽出する時 2008/01/31 14:13 trapemiya
>うちはデフォルトで付いてますね.

今、わかりました。私がVS2005のプロジェクトをVS2008のプロジェクトへ変換し、その中にあるフォームをコピーしながら新規フォームを作っているのが原因でした。
今、全く新規にフォームを作成したら、付いていました。
お騒がせしました。m(_ _)m

# re: LINQを使ってデータテーブルから1レコードのみ抽出する時 2008/02/05 7:38 入海
他の方もおっしゃっているようですが、Windows Live Writerは絶対おすすめです。ブログを書くことが楽しくなりますよ。

# re: LINQを使ってデータテーブルから1レコードのみ抽出する時 2008/02/05 11:34 trapemiya
そういえば入海さんのブログでもWindows Live Writerを取り上げられていたような記憶があります。お勧めなんですね。トライしてみます!

# re: LINQを使ってデータテーブルから1レコードのみ抽出する時 2008/02/05 17:07 trapemiya
なるほど。これでいいのか。

LINQ to SQLで1件だけを抽出する方法
http://blog.motdotnet.com/?eid=618977

# ルイ ヴィトン モノグラム バッグ 2023/03/10 8:43 sniebim@ybb.ne.jp
初めて購入させていただきました。
商品状態も良く、梱包も丁寧で気持ちよく受取りできました。
信頼できるショップだと思いましたありがとうございます。
ルイ ヴィトン モノグラム バッグ https://www.2bcopy.com/product/product.aspx-id=7317.htm

Post Feedback

タイトル
名前
Url:
コメント