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

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

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

Re[3]: VB.NET:DataTableからSelect文作成


(過去ログ 139 を表示中)

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

■81738 / inTopicNo.1)  VB.NET:DataTableからSelect文作成
  
□投稿者/ Artor (1回)-(2016/11/05(Sat) 12:59:14)

分類:[VB.NET/VB2005 以降] 

いつも参考にさせて頂いています。
VB.net の文字列操作について、質問させて下さい。
Visual Studio2013、.net framework 4を使用しています。

下記のように、データテーブルから、文字列(Select文のWhere句になるもの)を作りたいのですが、
なにか、スマートな方法はないでしょうか??
データテーブルはソートしてあり、CDの値が同じ間は、OR条件となります。

-----------------------------------
▼データテーブル(ソート済)
CD Data Table
001 鈴木 A.name
001 田中 A.name
002 東京 A.front
003 経理 A.buka
003 人事 A.buka

▼文字列
(A.name='鈴木' OR A.name='田中')
AND
A.front='東京'
AND
(A.buka='経理' OR A.buka='人事')
-----------------------------------

すみませんが、どなたかお知恵をおかりしたく、よろしくお願い致します。

引用返信 編集キー/
■81739 / inTopicNo.2)  Re[1]: VB.NET:DataTableからSelect文作成
□投稿者/ shu (935回)-(2016/11/05(Sat) 13:57:10)
No81738 (Artor さん) に返信

スマートか分かりませんがこんなのはどうでしょう?

        Dim tbl As New DataTable()
        With tbl.Columns
            .Add("CD", GetType(String))
            .Add("DT", GetType(String))
            .Add("TB", GetType(String))
        End With

        tbl.Rows.Add("001", "鈴木", "A.name")
        tbl.Rows.Add("001", "田中", "A.name")
        tbl.Rows.Add("002", "東京", "A.front")
        tbl.Rows.Add("003", "経理", "A.buka")
        tbl.Rows.Add("003", "人事", "A.buka")

        Dim whr As New System.Text.StringBuilder
        For Each itm In (From r In tbl.AsEnumerable
                Select CD = r.Field(Of String)("CD"), DT = r.Field(Of String)("DT"), TB = r.Field(Of String)("TB")
                Let Value = String.Format("{0}='{1}'", TB, DT)
                Group Value By CD Into Values = Group)
            If whr.Length > 0 Then whr.AppendLine(" AND ")
            If itm.Values.Count > 1 Then whr.Append("(")
            whr.Append(String.Join(" OR ", itm.Values.ToArray))
            If itm.Values.Count > 1 Then whr.Append(")")
            whr.AppendLine()
        Next

        Console.WriteLine(whr.ToString)

引用返信 編集キー/
■81741 / inTopicNo.3)  Re[2]: VB.NET:DataTableからSelect文作成
□投稿者/ Artor (2回)-(2016/11/05(Sat) 16:32:04)
2016/11/05(Sat) 16:59:25 編集(投稿者)
2016/11/05(Sat) 16:59:17 編集(投稿者)

Shu様

ご返答ありがとうございます!!
さすが!私の作ったソースよりずっとライン数も少なくてきれいです(^ ^)
可能であれば、一点お聞きしてもよろしいでしょうか?

LINQを使って実装するshu様の例の場合で、もしCDの値によって作成する文を変えたい場合はどうしたら良いのでしょうか?

CD DT TB
001 鈴木 A.name
001 田中 A.name
002 東京 A.front
003 経理 A.buka
003 人事 A.buka
004 2/1,2/10 A.date

たとえば、CDが004の場合、DTをBETWEEN 検索する「A.date BETWEEN 2/1 AND 2/10」という文字列を作りたい場合、Let Value の部分が2パターン…という書き方は可能でしょうか??

自分でも家のパソコンで(Visual Studio Community)試してみているのですが、LINQに詳しくなく、苦しんでいます…
引用返信 編集キー/
■81761 / inTopicNo.4)  Re[3]: VB.NET:DataTableからSelect文作成
□投稿者/ Artor (3回)-(2016/11/10(Thu) 16:08:55)
No81741 (Artor さん) に返信
> 2016/11/05(Sat) 16:59:25 編集(投稿者)
> 2016/11/05(Sat) 16:59:17 編集(投稿者)
>
> Shu様
>
> ご返答ありがとうございます!!
> さすが!私の作ったソースよりずっとライン数も少なくてきれいです(^ ^)
> 可能であれば、一点お聞きしてもよろしいでしょうか?
>
> LINQを使って実装するshu様の例の場合で、もしCDの値によって作成する文を変えたい場合はどうしたら良いのでしょうか?
>
> CD DT TB
> 001 鈴木 A.name
> 001 田中 A.name
> 002 東京 A.front
> 003 経理 A.buka
> 003 人事 A.buka
> 004 2/1,2/10 A.date
>
> たとえば、CDが004の場合、DTをBETWEEN 検索する「A.date BETWEEN 2/1 AND 2/10」という文字列を作りたい場合、Let Value の部分が2パターン…という書き方は可能でしょうか??
>
> 自分でも家のパソコンで(Visual Studio Community)試してみているのですが、LINQに詳しくなく、苦しんでいます…
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -