Dim windir = New DirectoryInfo("C:\Windows")
Dim fileInfos As FileInfo() = windir.GetFiles()
' LINQのクエリ
Dim query = From n In fileInfos _
Group n By ext = n.Extension Into g = Group _
Order By ext _
Select New With { .Extension = ext, .Files = g }
For Each ext In query
Console.WriteLine(ext.Extension) ' 拡張子を表示
For Each file In ext.Files
Console.WriteLine(vbTab & file.Name) ' ファイル名を表示
Next
Next
End Sub
End Class
' コンパイル方法:vbc grouping1.vb
拡張子ごとにファイル名を一覧表示するサンプル・プログラム(上:C#、下:VB)
最初のポイントとなるのは、グループ化を行うためのgroup句だ。
group n by n.Extension into g
Group n By ext = n.Extension Into g = Group _
グループ化を行うためのLINQのgroup句(上:C#、下:VB)
コード内の「〜 by n.Extension 〜」の記述より、オブジェクトのシーケンス(=並び)は、Extensionプロパティによりグループ化される。また、「〜 into g 〜」の記述により、各グループのシーケンスは、変数gにより参照できるようになる。
var windir = new DirectoryInfo("C:\\Windows");
FileInfo[] files = windir.GetFiles();
// LINQのクエリ
var query = from n in files
group n by n.Extension.ToLower() into g
orderby g.Key
select new {
Extension = g.Key,
Files = from m in g
orderby m.Name
select m
};
foreach (var ext in query) {
Console.WriteLine(ext.Extension); // 拡張子を表示
Dim windir = New DirectoryInfo("C:\Windows")
Dim fileInfos As FileInfo() = windir.GetFiles()
' LINQのクエリ
Dim query = From n In fileInfos _
Group n By ext = n.Extension.ToLower() _
Into g = Group _
Order By ext _
Select New With { _
.Extension = ext, _
.Files = _
From m In g Order By m.Name Select m _
}
For Each ext In query
Console.WriteLine(ext.Extension) ' 拡張子を表示
For Each file In ext.Files
Console.WriteLine(vbTab & file.Name) ' ファイル名を表示
Next
Next
End Sub
End Class