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

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

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

Re[3]: LINQに正規表現を用いる方法


(過去ログ 45 を表示中)

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

■23969 / inTopicNo.1)  LINQに正規表現を用いる方法
  
□投稿者/ たこやき (1回)-(2008/08/25(Mon) 16:43:43)

分類:[.NET 全般] 

新しい項目の追加の「LINQ to SQL」を用いて myDataContext を作成しています。
そして該当データの選択を以下の通り行いました。
private void button1_Click(object sender, EventArgs e)
{
myDataContext dc = new myDataContext();
var aa =
from p in dc.TBL
where p.FLD=="検索語"
select p;
myBindingSource.DataSource = aa;
}

private void button2_Click(object sender, EventArgs e)
{
myDataContext dc = new myDataContext();
Regex rg = new Regex("検索語");
var aa =
from p in dc.TBL
where rg.IsMatch(p.FLD)   // <---ここでエラー
select p;
myBindingSource.DataSource = aa;
}
button1は成功しますが、正規表現を用いたbutton2は失敗します。
どこがおかしいのでしょうか。よろしくお願い致します。

引用返信 編集キー/
■23971 / inTopicNo.2)  Re[1]: LINQに正規表現を用いる方法
□投稿者/ シャノン (588回)-(2008/08/25(Mon) 17:00:10)
No23969 (たこやき さん) に返信
> button1は成功しますが、正規表現を用いたbutton2は失敗します。
> どこがおかしいのでしょうか。よろしくお願い致します。

情報が足りません。

どのような結果になるのですか?
エラーが出るのですか?
エラーは出ないけれど意図した結果が出ないのですか?
正規表現パターンはどうなっていますか?
引用返信 編集キー/
■23972 / inTopicNo.3)  Re[2]: LINQに正規表現を用いる方法
□投稿者/ たこやき (2回)-(2008/08/25(Mon) 17:28:57)
返信ありがとうございます。書き方が悪くて申し訳ありません。

> 正規表現パターンはどうなっていますか?
Regex rg = new Regex("検索語", RegexOptions.IgnoreCase);としています。

そして
雑録BindingSource.DataSource = aa; でBinding失敗でストップします。
var aa が空の状態になっているからだと思います。

データソースの作成に当たっては、「LINQ to SQL」で作成したオブジェクトを
使わずにデータベースから直接作成すると、以下の記述で成功します。
private void button3_Click(object sender, EventArgs e)
{
DataTable dt = myDataSet.Tables["TBL"];
Regex rg = new Regex("検索語", RegexOptions.IgnoreCase);
var cc =
from p in dt.AsEnumerable()
where rg.IsMatch(p.Field<string>("FLD")) // <--成功している
select p;
dt = cc.CopyToDataTable<DataRow>();
BindingSource bs = new BindingSource();
bs.DataSource = cc;
myDataGridView.DataSource = bs;
}
素人なのでわからないことばかりで、どうかよろしくお願いします。


引用返信 編集キー/
■23996 / inTopicNo.4)  Re[3]: LINQに正規表現を用いる方法
□投稿者/ たこやき (3回)-(2008/08/26(Tue) 13:33:05)
めでたく自己解決ができました。
以下のように AsEnumerable()をつけるとうまく行くようになりました。

private void button2_Click(object sender, EventArgs e)
{
rxDBDataContext dc = new rxDBDataContext();
Regex rg = new Regex("検索語");
var aa =
from p in dc.TBL.AsEnumerable() // <--- AsEnumerable()を追加
where rg.IsMatch(p.FLD)
select p;
myBindingSource.DataSource = aa;
}

しかし、気になるのがスピードです。今は300件ほどのデータで行っていますが、
button3で行うと瞬時に選択されますが、上記の方法だと数秒かかります。
どうしてでしょうか?
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -