はじめに
不慣れな .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 構文は出来上がりがスッキリなので好きです。
もっと良い書き方があれば教えてくださいませ。