@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

LINQ技術を利用したデータ操作

1
投稿者投稿内容
KNGY
会議室デビュー日: 2008/04/28
投稿数: 8
投稿日時: 2008-04-28 19:08
いつもお世話になっております。。

現在 Visual Studio 2008(.NET3.5)にて開発を進めています。
DB:SQLServer2005
言語:C#

LINQ技術によりデータの取得を行っているのですが、
取得したEntityのデータ操作の仕方がどうもよくわかっていません。
取得したエンティティにエラーチェックをかまして、
その結果をデータグリッドビューコントロールに反映させたいのですが。。
(C#にてエラーチェックの共通部品が用意されてしまっているためSP等は使用できない状況です。)

詳細として、以下のサンプルソースのコメントアウト部分を解決したいのですが、
何か良い方法があればご教授お願いできますでしょうか?

//ソース開始

public partial class Form1 : Form
{
delegate int SampleDelegate(int x, int y);

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
BumonMst bumonmst = new BumonMst();
DataClasses1DataContext dataContext = new DataClasses1DataContext();

var query = from p in dataContext.BumonMst
where p.BumonCd.Length >= 3
select p;

//ここでqueryに対してcheckBumonCdメソッドを使いたい.
//checkBumonCdがtrueのレコードに対して項目「flg」(フラグ:CHAR(1))に"1"を立てる処理を行う。


this.dataGridView1.DataSource = /*上でエラーチェックをしたデータエンティティ?をDataSourceに割り当てる*/;

}

private bool checkBumonCd(string bumoncd)
{
if (bumoncd.Equals("001"))
{
return true;
}
else
{
return false;
}

}
}

//ソース終了

以上よろしくお願いします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2008-04-28 20:11
query をループしてチェックするんじゃダメ?


# bumonmstって何に使ってるんだろう。
_________________
かるあ のメモスニペット
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-04-30 10:45
queryにたいしてToListとか使ってLISTにしたうえでループをまわしてcheckBumonCdを適用するのがプログラムとしてはわかりやすいかなぁ。
BumonMstが持つプロパティ(というかテーブルの項目数)が少ないなら、select pとしてBumonMst型(のはず)を返すんじゃなくて、selectの中で各項目の値を返すようにして、そこでcheckBumonCdを実行してflgの値を設定するのもありかも。

そんな感じで作ったデータをそのままDataSourceに渡せば、表示するだけならできるはず。
KNGY
会議室デビュー日: 2008/04/28
投稿数: 8
投稿日時: 2008-04-30 12:36
かるあさん、どっとねっとふぁんさん返答どうもありがとうございます。


>BumonMstが持つプロパティ(というかテーブルの項目数)が少ないなら、select pとして
>BumonMst型(のはず)を返すんじゃなくて、selectの中で各項目の値を返すようにして、
>そこでcheckBumonCdを実行して flgの値を設定するのもありかも。

このような形で実現してみました。
<pre>
//ソース開始
public partial class Form1 : Form
{
delegate int SampleDelegate(int x, int y);

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
BumonMst bumonmst = new BumonMst();
DataClasses1DataContext dataContext = new DataClasses1DataContext();

//部門コードに対してプライベートメソッド使用
var query = from p in dataContext.BumonMst
where p.BumonCd.Length >= 3
select new {
BumonCd = p.BumonCd
,BumonMei = p.BumonMei
,Flg = this.checkBumonCd(p.BumonCd.ToString())

};


this.dataGridView1.DataSource = query;

}


private bool checkBumonCd(string bumoncd)
{
if (bumoncd.Equals("211111"))
{
return true;
}
else
{
return false;
}

}
}

//ソース終わり
</pre>
参照:どっとねっとふぁん様の「LINQな世界へ招待」
http://clr-h.net/launch2008/CLRH_Launch2008_Session3.pdf


何分、3.5に慣れていないものでまた何かありましたら、よろしくお願いします。。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-04-30 19:12
よさげな答えがでているので、以下は参考までに。。。

引用:

KNGYさんの書き込み (2008-04-28 19:08) より:

LINQ技術によりデータの取得を行っているのですが、
取得したEntityのデータ操作の仕方がどうもよくわかっていません。
取得したエンティティにエラーチェックをかまして、



そうですね、ストアドでも見られますが
「手続き言語系」(女性系)と「非手続き言語系」(男性系)
が混在する場合なぜか「非手続き言語系」に突っ込みたくなる
(かましたくなる)
衝動にかられますね。。。。

これはPG性(サガ)?

しかし、突っ込みたくなる衝動を抑えるのが悟りの境地です。
1

スキルアップ/キャリアアップ(JOB@IT)