我正在解決一個問題,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)),其中不考慮區域 :
[
{
"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 模型并僅選擇我想要的區域項(基于區域識別符號)?
uj5u.com熱心網友回復:
所以你有一個CasesDtos(復數名詞)的可列舉序列,其中每個CasesDto(單數名詞)至少有屬性Date和Region。
Region 是 的可列舉序列RegionDatas。每個 RegionData 都有幾個屬性,其中一個屬性RegionName.
我認為您已經描述了以下要求:
要求:給定 的字串值
regionName和 的序列CasesDtos,給我Date和 的RegionData每個CasesDto至少RegionData有一個屬性值RegionName等于regionName。
如果 CasesDto 有兩個具有正確 RegionName 的 RegionData,您沒有告訴您想要什么:
string regionName = "CA";
var casesDto = new CasesDto
{
Date = ...
Region = new List<RegionData>()
{
new RegionData()
{
RegionName = "CA",
...
},
new RegionData()
{
RegionName = "CA",
...
}
}
}
caseDto 有兩個具有匹配 RegionName 的 RegionData。您希望最終結果是什么:只有日期和 RegionData 之一?哪一個?或者你想要所有具有匹配 RegionName 的 RegionDatas?
總之,解決辦法是:
string regionName = "CA";
IEnumerable<CasesDto> casesDtos = ...
// from every CasesDto, make one object, containing the Date, and a property
// Region, which contains only those RegionDatas that have a value for property
// RegionName that equals regionName
var result = casesDtos.Select(casesDto => new
{
Date = casesDto.Date,
// keep only those Regions that have a matching RegionName:
Region = casesDto.Region
.Where(region => region.RegionName == regionName)
.ToList(),
}
// From this selection, keep only those object that have at least one Region:
.Where(casesDto => casesDto.Region.Any());
換句話說:對于casesDtos 中的每個CasesDto,創建一個具有兩個屬性的新物件:CasesDto 的日期和一個屬性Region,其中包含具有匹配RegionName 的此CasesDto 的RegionDatas。從這個 Select 結果中,只保留那些在串列 Region 中至少有一個元素的物件。
uj5u.com熱心網友回復:
var cases = new List<CasesDto>{
new CasesDto{
Date = DateTime.Now,
Region = new List<RegionData> {
new RegionData{
RegionName = "CE"
},
new RegionData{
RegionName = "DE"
}
}
},
new CasesDto{
Date = DateTime.Now.AddDays(10),
Region = new List<RegionData> {
new RegionData{
RegionName = "DE"
}
}
}
};
var filteredCases = new List<CasesDto>();
var regionName = "CE";
cases.ForEach(c => {
if(c.Region.Any(x => x.RegionName == regionName)){
c.Region = c.Region.Where(x => x.RegionName == regionName).ToList();
filteredCases.Add(c);
}
});
稍微簡化以節省我一些時間。使用 ForEach 我們列舉串列并檢查我們是否有一個具有給定區域名稱的區域。如果是這樣,我們過濾當前串列以僅包含正確的區域并將此結果附加到新串列中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/322291.html
上一篇:Pandasdf如何更改特定列以從單元素串列中洗掉串列
下一篇:如何將大型嵌套集拆分為單獨的集?
