【发布时间】:2022-01-01 13:51:48
【问题描述】:
我有一个字符串:
private const string Codes = "2,10";
public void method()
{
var displayCodes = Codes.Split(',');
DemoResponse response = webService.GetResponse(); //getting response from API
if(response.Errors.Any(x => displayCodes.Contains(x.StackTrace))
{
int myCode = int.Parse(response.Errors.Select(x => x.StackTrace).FirstOrDefault());
}
}
这是“DemoResponse”模型:
public class DemoResponse
{
public bool Validate { get; set; }
public IEnumerable<ErrorResponse> Errors { get; set; }
}
public class ErrorResponse
{
public string Message { get; set; }
public string StackTrace { get; set; }
}
来自 API 的 DemoResponse“响应”返回结果为:(例如)
{
"Validate" : false,
"Errors" :
{
"Message" : "test1",
"StackTrace" : "2"
}
}
{
"Validate" : false,
"Errors" :
{
"Message" : "test1",
"StackTrace" : "2"
}
}
{
"Validate" : false,
"Errors" :
{
"Message" : "test1",
"StackTrace" : "95"
}
}
DemoResponse "response" 将始终仅包含来自 const string "Codes" 的代码之一,即 2 或 10。但可能包含其他代码。
如果 DemoResponse "response" 包含代码 2 作为第一个代码,则此行可以正常工作:
int myCode = int.Parse(response.Errors.Select(x => x.StackTrace).FirstOrDefault());
但如果 DemoResponse“响应”没有代码 2 作为第一个,那么我如何编写一个 LINQ 来选择代码 2 并分配给“myCode”变量? 例如:
"StackTrace" : "95",
"StackTrace" : "95",
"StackTrace" : "2"
【问题讨论】:
-
您需要使用
Where方法并反转解析代码以完全不处理“2”。int myCode = response.Errors.Where(e => e.StackTrace == "2").Select(e => int.Parse(e.StackTrace)).FirstOrDefault();- 对于任一可能的代码,请执行int myCode = response.Errors.Where(e => displayCodes.Contains(e.StackTrace)).Select(e => int.Parse(e.StackTrace)).FirstOrDefault();注意:如果两个代码都不存在,则您不需要if,myCode将是0。
标签: c# asp.net linq asp.net-core