fc2ブログ

記事一覧

LinqでDictionary型から条件を指定してフィルターし、ToDictionaryで元の型に変換する方法 | VB.NET


VB.NETにてLinqを使用してデータの加工をすることがあると思いますが、LinqのWhereで条件を指定して抽出したデータ型がIEnumerable型になってしまいますので、元の型に戻す必要がありました。今回はDictionary型からWhereで絞ったデータをDictionary型に変換する方法についてご紹介いたします。


vb_todictionary_01.png



前提条件
Windows 7 professional 以降 / Windows Server 2008 R2 以降
Visual Studio 2008 professional 以降
vb.net
.Net FrameWork 3.5 以降 (System.Linqを参照設定)



1.変換手順

(1)変換元をDictinary型で定義する。
    Dictionary<キーとなる型, 値となる型>
    Dim customerDic As New Dictionary(Of Integer, CustomerInfo)
   
<参考URL>
https://msdn.microsoft.com/ja-jp/library/xfhwa508(v=vs.110).aspx
   
(2)System.Linq.Enumerable.Whereで顧客情報クラスの名前に「太郎」が含まれているという条件を指定してデータ抽出する
    customerDic.Where(Function(r) r.Value.Name.Contains("太郎"))

<参考URL>
https://msdn.microsoft.com/ja-jp/library/bb534803(v=vs.110).aspx

(3)System.Linq.Enumerable.ToDictionaryでDctionary型に変換する
    .ToDictionary(Function(r) r.Key, Function(r) r.Value)

<参考URL>
https://msdn.microsoft.com/ja-jp/library/system.linq.enumerable.todictionary(v=vs.110).aspx



2.サンプルコード

'Dictionary型に代入するデータクラス
Public Class CustomerInfo
    Public Property Id As Integer
    Public Property Name As String
    Public Sub New(ByVal id As Integer, ByVal name As String)
        Me.Id = id
        Me.Name = name
    End Sub
End Class

Public Class HowToUseDictionary
    Public Sub ConvertToDic()
        '変換したいDictinary型の定義
        Dim customerDic As New Dictionary(Of Integer, CustomerInfo)
        'サンプルデータを代入
        customerDic.Add(1, New CustomerInfo(1, "山田太郎"))
        customerDic.Add(2, New CustomerInfo(2, "山田花子"))
        customerDic.Add(3, New CustomerInfo(3, "平成太郎"))
        'Whereで条件を指定して絞り込む
        Dim customerEnum = customerDic.Where(Function(r) r.Value.Name.Contains("太郎"))
        '元のDictinary型に変換する
        customerDic = customerEnum.ToDictionary(Function(r) r.Key, Function(r) r.Value)
'出力
For Each kvp As KeyValuePair(Of Integer, CustomerInfo) In customerDic
Dim cInfo As CustomerInfo = DirectCast(kvp.Value, CustomerInfo)
Debug.WriteLine(cInfo.Id.ToString + ":" + cInfo.Name)
Next
    End Sub
End Class

出力結果
--------------------------------------
1:山田太郎
3:平成太郎


ToDictionaryの構文はDictionary型の構成によって多少変化しますが、このような使用方法が多いと思います。





最後までお読みいただき、ありがとうございます。
他にも VB.net に関する記事 をご紹介しておりますのでご参考頂ければ幸いです。



関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。