vb.netメモ。
環境:
Visual Studio2015
LinqでGROUPBYしたい
指定期間で絞った中でGROUPBYでCOUNTのSUMを取りたい
TABLE=FOO
no | name | date_disp | count |
---|---|---|---|
01 | すずめ | 20180301 | 4 |
02 | めじろ | 20180302 | 2 |
03 | ひばり | 20180301 | 1 |
01 | すずめ | 20180302 | 1 |
01 | すずめ | 20180312 | 5 |
02 | めじろ | 20180315 | 2 |
01 | すずめ | 20180322 | 1 |
Dim list_DB_ALL As SortableBindingList(Of TBL_FOO) ’FOOテーブルの結果をセット Dim list_selection = list_DB_ALL _ .Where(Function(x) x.date_disp > '20180301' And x.date_disp < '20180320' _ .GroupBy(Function(x) New With {Key x.no, Key x.name }, Function(k, x) Return New TBL_FOO_SUM With { .no= k.no, .name= k.name, .SUM_COUNT= x.Sum(Function(e) e.count) } End Function).ToList
項目2つでソートしたい
項目AAでソートしたあとに項目BBでソートするときは「ThenBy」を使う。
降順にする場合はOrderByDescending / ThenByDescending を使う。
Dim list= list_DB_ALL. Where(Function(x) x.AA= aa). OrderBy(Function(x) x.AA). ThenBy(Function(s) s.BB).ToList
コンストラクタでコントロールに対するカーソルの設定
MouseEnter時は「↔(左右)」カーソルにして、離れたら(Leave)通常のカーソルにする。
AddHandler ラベル.MouseEnter, Sub(sender, e) Me.Cursor = Cursors.SizeWE AddHandler ラベル.MouseLeave, Sub(sender, e) Me.Cursor = Cursors.Default
小数点以下X桁を取得
ほんとはROUNDじゃなくてFLOOR(またはTRUNCATE)したかったけどできなかった。
Dim int_a As Interger = 30 Dim int_b As Interger = 31 ' 30/31の結果を小数点以下3桁まで取る '0.96774193 ≒ 0.968 Dim dec_diff As Decimal = CDec(Math.Round( int_a / int_b , 3, MidpointRounding.AwayFromZero))
MidpointRounding.AwayFromZero以外にMidpointRounding.ToEvenがある。
この2つの違いは丸める方法の違いによる。
AwayFromZeroは四捨五入、ToEvenはバンカー丸め(銀行型丸め/最近接偶数への丸め)。
アプリケーションパス名を取得
'自分自身の実行ファイルのパスを取得する Dim path As String path = System.Reflection.Assembly.GetExecutingAssembly.Location 'ディレクトリ名の取得 = System.IO.Path.GetDirectoryName path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly.Location)