Help us understand the problem. What is going on with this article?

仕事で思いついたLINQ小ネタ集

More than 1 year has passed since last update.

仕事で思いついたLINQ小ネタ集

チェックエラーのメッセージをDictionaryから取り出す

Dictionary(Of String, Boolean)とした、msgResult(errorMsg, result) の、
result = False のメッセージを取り出したいとき、

GetFalseMessage
Private Function GetFalseMessage(ByRef msgResult As Dictionary(Of String, Boolean)) As IEnumerable(Of String)
    Return msgResult.Where(Function(d) Not d.Value).Select(Function(d) d.Key)
End Function

説明

  • シンプルに。Dictionary.ValueがBooleanであることを利用
  • SQLならSELECT result From msgResult WHERE value = Falseのイメージ

Pythonでいうall(list)がやりたい

IsAllTrue
Public Function IsAllTrue(ByRef boolList As List(Of Boolean)) As Boolean
    Return boolList.All(Function(bl As Boolean) bl)
End Function

説明

  • LINQにもAllがあるので利用。ただし、Pythonと違ってラムダ式が必要
  • VB.Netでのラムダ式の書き方があまり好きではないです……
    • Listの中身がBooleanなので、型の確認は不要なんですが、書き換えたときの副作用が怖いので

番外編: LINQの条件の先出しをする

Tは任意の型・クラスに置き換えてください

GetWhereCondition
Dim itemWhere As Func(Of T, Boolean) = (xを利用した条件)
Dim itemExist As New Predicate(T)(Function(x As T) (xを利用した条件))

説明

  • フラグごとに処理を使い分けるものの、LINQでは共通の条件を複数個所に利用するときに有効
  • 特に、LINQの条件が複雑だったり、長くなってしまった場合に切り分けると良いです
  • Existsに使う時の引数の型が違うことに気づけず詰みかけました
  • この考え方は、例えば文字列のRegex.Match(value).Successの条件の設定にも利用
ayumu_walking
仕事で見つけたノウハウや、技術書のメモなど公開します。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした