もっと簡単な方法はあるんだろうなと思いつつ、VB4なステゴサウルスは今日もがんばる(笑)
さて、一覧ができたので、次は検索機能を。ランク、ダンジョン、報酬で検索するんだけど、絞り込み条件は色々と組み合わせられて、かつ、それらをAND条件にしたいわけです。
まだリストはバグバグだけど、とりあえずできてる。なのでこの段階で一覧から入力するコントロールを配置。「(すべて)」は必須だとおもってるので、静的カラムも追加して、AppendDataBoundItemsをTrueにセット。で、考えたこと。Oracleなんかの動的Where句がLINQでかけるのかどうかがよくわからない(おい)。そこで、対象データのMIDを収集してそれでJOINすることでLINQ部分は静的コードでかけるなぁ、と。
'コンテキスト宣言
Dim pMContext = New nListDataContext
'まずは全件とっちゃう
Dim dMl = From L In pMContext.pMission Select L.RNK, L.DID, L.RWRD, L.MID
'ランクで絞込み
If dRank.SelectedIndex > 0 Then
dMl = From L In dMl Where L.RNK = dRank.SelectedValue
End If
'ダンジョンで絞込み
If dDNGN.SelectedIndex > 0 Then
dMl = From L In dMl Where L.DID = dDNGN.SelectedValue
End If
'報酬をあいまい検索
If tRWD.Text > "" Then
dMl = From L In dMl Where L.RWRD Like "*" & tRWD.Text & "*"
End If
'対象データがあったらバインド、なかったらごめんなさい
If dMl.Count > 0 Then
Gd.DataSource = From L In pMContext.pMission Where L.MID Join M In dMl On L.MID Equals M.MID _
Select _
DNGN = L.dMaster.DNAME & "(" & L.FLR & "F)", _ RANK = L.RNK & "(" & L.LVL & ")", _ RWD = L.RWRD, _
PWD = L.PWD1 & " " & L.PWD2 & " " & L.PWD3 & " " & L.PWD4 & " " & L.PWD5 & " " & L.PWD6
Else
Gd.DataSource = Nothing
End If
Gd.DataBind()
みたいなソースを書いてみたところ……
できたw