[英]How to filter a flattened LINQ result in C#
我有一个 JSON 响应,其中包含几个作业的列表,每个作业都可以有标签,标签由键/值对组成,其中值是值列表。 我正在尝试在 C# 中形成一个 LINQ 查询,该查询返回一个作业 ID 列表,其中每个作业都有一个带有键 =“区域”的标签,值包含“测试”。
我已经成功地将 JSON 反序列化为类,但我是 LINQ 的新手,并且已经花费了大量时间来试验和谷歌搜索可能的解决方案,但无济于事。
样本数据:
{
jobs: [
{
id: 1
tags: [
{
key: "Area"
values: [ "TEST", "SHIP" ]
}
}
{
id: 2
tags: [
{
key: "Area"
values: [ "BUILD" ]
}
}
{
id: 3
tags: [
{
key: "Area"
values: [ "INSPECT", "TEST", "SHIP" ]
}
{
key: "Status"
values: [ "HOLD", "SPECIAL" ]
}
}
{
id: 4
tags: [
{
key: "Area"
values: [ "BUILD", "TEST" ]
}
}]
}
Class 结构:
public class Tag
{
public string key { get; set; }
public List<string> values { get; set; }
}
public class Job
{
public int id { get; set; }
public List<Tag> tags { get; set; }
}
所以我想要的是一个Job.id列表,其中job.tags包含一个Tag ,其中Tag.values包含“TEST”。 在这个样本中,
1
3
4
任何 LINQ 专家都知道如何解决这个问题?
var result = jobs.Where(j => j.tags != null
&& j.tags.Any(t => t.key.Equals("Area")
&& t.values.Contains("TEST")))
.Select( x => x.id)
.ToList();
result
将是包含 1,3,4 的int
List
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.