LINQ チート

Public Sub A()
Dim list = New List(Of Integer) From {1, 84, 95, 95, 40, 5, 6}
Dim test = list.Select(AddressOf adder)


Console.WriteLine("First: " + list.First().ToString)
Console.WriteLine("Last: " + list.Last().ToString)
Console.WriteLine(list.Max().ToString)
Console.WriteLine(list.Min().ToString)
Console.WriteLine(list.Sum().ToString)
Console.WriteLine(list.Average().ToString)
Console.WriteLine(list.Count().ToString)

Dim list2 As List(Of Object) = list.Cast(Of Object).ToList()
Dim list3 = list.Distinct()
'---先頭から3つのリストを飛ばす
Dim list4 = list.Skip(3)
'---先頭から3つのリストを取得
Dim list5 = list.Take(3)
'■条件
Console.WriteLine("全Itemが83より大きいか" & list.All(Function(x) x > 83))
Console.WriteLine("いずれかのItemが96より大きいか" & list.Any(Function(x) x > 96))
Console.WriteLine("Listに含まれるか" & list.Contains(5))

Dim td As New TDUserInfo()
td.Execute()
Dim list6 = td.DataLists
'---ソート
'昇順
'単一項目しか持たないListのソート
Dim wList2 As New List(Of String)
listTdc = listTdc.OrderBy(Function(x) x.ControlNo).ToList
Dim orderByList = list6.OrderBy(Function(x) x.UserId).ToList
Console.WriteLine("=== orderByList ===")
For Each x In orderByList
Console.WriteLine(x.UserId)
Next
'=== orderByList ===
'1
'111
'1212C:\Users\kagaw\source\repos\AACollateral\AACollateral\Resources\Mapping_Address.xml1212
'---降順
Dim orderByList2 = list6.OrderByDescending(Function(x) x.UserId)
'---条件
Dim list7 = list6.Where(Function(x) x.UserGrant = 1 And x.UserStatus = 1) _
.OrderBy(Function(x) x.UserId)
Console.WriteLine("=== orderByList ===")
For Each x In list7
Console.WriteLine(x.UserId)
Next
'---値のSelect(主に何か値を変換(加算したり)して出す場合、Select)
Console.WriteLine("=== Select ===")
'---単一項目のSelect
Dim list8_1 = list6.Select(Function(x) x.UserGrant + 100)
'---複数項目Selectする場合は、匿名クラスに値を入れないといけない
'---匿名クラスのフィールド名は任意に指定できる。下記例でいうと、.GrantSum、.NotSumGlantを指定した。
Dim list8_2 = list6.Select(Function(x) New With {.GrantSum = x.UserGrant + 100, .NotSumGlant = x.UserGrant})
For Each x In list8_2
Console.WriteLine(x.GrantSum & " " & x.NotSumGlant)
Next
'---匿名クラスに型を指定する場合
Dim list8_3 = list6.Select(Function(x) New TGrantRoles() With {.GrantId = x.UserGrant, .RoleId = x.GrantText})

'---ユーザID毎の復号パスワードを取得する
Dim sec As New SecurityUtils
Dim lst = list6.Where(Function(x) Not x.UserIv Is Nothing) _
.Select(
Function(x) New With {x.UserId, .PasswordDec = sec.Decrypt(
New TAESSet With {.Iv = x.UserIv, .Salt = x.UserSalt, .EncryptedText = x.UserPassword, .KeyCreatePassPharse = AppConstants.SEC_SQL_PASS_PHARSE}
).DecryptedText
})


Console.WriteLine("=== SelectWhere ===")
Dim list9 = list6.Select(Function(x) New With {.GrantSum = x.UserGrant + 100, x.UserGrant, x.UserId}) _
.Where(Function(x) x.GrantSum > 102)
For Each x In list9
Console.WriteLine(x.UserGrant.ToString)
Next
Console.WriteLine("=== WhereSelect ===")
Dim list10 = list6.Where(Function(x) x.UserGrant > 2) _
.Select(Function(x) New With {.GrantSum = x.UserGrant + 100, x.UserGrant, x.UserId})
For Each x In list10
Console.WriteLine(x.ToString)
Next
Console.WriteLine("=== GroupBy ===")
Dim list11 = list6.GroupBy(Function(x) x.UserGrant).Select(Function(x) x.First())
For Each x In list11
Console.WriteLine(x.GrantText)
Next
Console.WriteLine("=== 2項目でGroupBy ===")
'---2項目でGroupByする場合は、Tupleを作るか、New Withの場合は各項目に "Key"を付与する。
Dim list12_1 = list6.GroupBy(Function(x) Tuple.Create(x.UserGrant, x.UserStatus)) _
.Select(Function(x) x.First()) _
.OrderBy(Function(x) x.UserGrant)
Dim list12_2 = list6.GroupBy(Function(x) New With {Key x.UserGrant, Key x.UserStatus}) _
.Select(Function(x) New With {.groupItem = x.Key.UserGrant, .groupCategory = x.Key.UserStatus, .sumQuantity = x.Sum(Function(s) s.UserGrant)}).ToList
For Each x In list12_2
Console.WriteLine(x.groupCategory & " " & x.groupItem & " " & x.sumQuantity)
Next

Console.WriteLine("=== ControlNoManage ===")

Dim tdC As New TDControlNoManager()
tdC.Execute()
Dim listTdc = tdC.DataLists
'---ソート
'昇順
'単一項目しか持たないListのソート
listTdc = listTdc.OrderBy(Function(x) x).ToList
Dim orderByList22 = listTdc.OrderBy(Function(x) x.UserId)
Console.WriteLine("=== orderByList ===")
For Each x In orderByList
Console.WriteLine(x.UserId)
Next

Dim a As Action(Of Int16)
Dim b As Func(Of Int16, Int16, Int16, Int16, String)

a = Function(sb) Show(sb.ToString)
b = Function(aaa, bbb, ccc, ddd) aaa * bbb * ccc * ddd.ToString

a.Invoke(5)
Debug.WriteLine(b.Invoke(1, 2, 3, 4))