C#
.NET
LINQ

LINQのメソッド構文を使って「いずれか含む」検索を実装する

はじめに

不慣れな .NET 環境での開発で小一時間悩んでしまったので記録。
「LINQてなに?」な方は この記事 を読むと幸せになれます。

やりたいこと

  • JSON文字列のリストから、特定のプロパティに指定の値が設定されているレコードを取得したい。
  • 指定の値は複数なので、条件を「いずれか含む」としたい。
  • レコード毎のJSON Deserializeはしない。
  • LINQを使って簡潔に記述したい(for文とか✖)

やってみた

sample.cs
using System;
using System.Linq;
using System.Collections.Generic;

namespace workspace
{
    class Program
    {
        static void Main(string[] args)
        {
            var requests = new List<string>
            {
                "{\"Code\":1,\"test\":\"value\"}",
                "{\"Code\":2,\"test\":\"value\"}",
                "{\"Code\":3,\"test\":\"value\"}",
                "{\"Code\":4,\"test\":\"value\"}"
            };

            var patterns = new List<string>()
            {
                "\"Code\":1,",
                "\"Code\":2,",
                "\"Code\":5,",
                "\"Code\":6,"
            };

            var results = requests.Where(r => patterns.Any(p => r.Contains(p)));
            foreach (var result in results)
                Console.WriteLine(result);
        }
    }
}

結果

意図したとおりのデータが取得できました。
▶デモはこちら

ポイントは Where メソッドの入れ子。 WhereメソッドにAnyメソッドを入れ子。
思いつくのに時間がかかりましたが、LINQ 構文は出来上がりがスッキリなので好きです。

もっと良い書き方があれば教えてくださいませ。

参考