6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-05-02

はじめに

不慣れな .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 構文は出来上がりがスッキリなので好きです。

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

参考

6
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?