【发布时间】:2021-12-05 09:49:52
【问题描述】:
我正在解决一个问题,即由于区域名称条件,我想从列表List<RegionData> 中删除不需要的对象。
作为条目输入,我收到var data,其中包含List<CasesDto>。一项CasesDto 对应于某个特定日期收到的所有基于地区的数据。
这是我用作示例的两个类:
public class CasesDto
{
public DateTime Date {get; set;}
public List<RegionData> Region {get; set;}
}
和
public class RegionData
{
public string RegionName {get; set;}
public int DailyActiveCases {get; set;}
public int DeceasedToDate {get; set;}
}
这是当前的输出示例(为了便于查看,我只包含了两个日期(= 两个 CasesDto)),其中 region 没有 被考虑在内:
[
{
"date": "2021-05-22T00:00:00",
"region": [
{
"regionName": "ce",
"dailyActiveCases": 615,
"deceasedToDate": 568
},
{
"regionName": "kk",
"dailyActiveCases": 170,
"deceasedToDate": 197
},
{
"regionName": "kp",
"dailyActiveCases": 278,
"deceasedToDate": 166
}
]
},
{
"date": "2021-05-23T00:00:00",
"region": [
{
"regionName": "ce",
"dailyActiveCases": 613,
"deceasedToDate": 570
},
{
"regionName": "kk",
"dailyActiveCases": 167,
"deceasedToDate": 197
},
{
"regionName": "kp",
"dailyActiveCases": 277,
"deceasedToDate": 166
}
]
}
]
如果应用 regionName="ce",这是我想要的输出:
[
{
"date": "2021-05-22T00:00:00",
"region": [
{
"regionName": "ce",
"dailyActiveCases": 615,
"deceasedToDate": 568
}
]
},
{
"date": "2021-05-23T00:00:00",
"region": [
{
"regionName": "ce",
"dailyActiveCases": 613,
"deceasedToDate": 570
}
]
}
]
我想用 lambda 函数解决这个问题。
我的尝试:
data = data.ForEach(x => x.Region.Where(t => t.RegionName == region)).ToList();
但是,我收到的返回类型不匹配。如何访问 RegionData 模型并仅选择我想要的区域项(基于区域标识符)?
【问题讨论】:
-
var filteredData = data.Where(t => t.Region.RegionName == region);
-
var filtered = data.Where(x => x.Region.Any(t => t.RegionName == region)); -
这不起作用,因为 t.Region 是一个 List
。它找不到 RegionName。它可以与 t.Region[i].RegionName 一起使用,但是没有索引“i”可以帮助我们解决这个问题。 -
@JochemVanHespen 您的示例已编译,但它不起作用。它返回与输入相同的输出。它没有过滤。
-
@JochemVanHespen 非常感谢,您在 sn-p 中的回答非常完美。你能发布你的答案以便我批准吗?
标签: c# .net list linq .net-core