c# - 如果在 linq 语句 C# 中不满足值,则显示值
问题描述
我有这个 linq,如果过滤掉状态并且只显示“合格”、“提交”、“处理”、“资助”作为最后状态,我如何添加如果状态不是那些显示 LastStatus 为 N/A
public string LastStatus
{
get
{
return Loans
.SelectMany(s => s.LoanMilestones)
.Where(w => new List<string> { "Qualified", "Submitted", "Processing","Funded" }.Contains(w.Milestone))
.OrderByDescending(o => o.MilestoneDate)
.FirstOrDefault()?.Milestone;
}
}
解决方案
您的代码的第一个大问题是您正在为初始数组中的每个项目创建和填充一个全新的列表。第二个大问题是您正在临时数组中进行线性搜索。考虑到这两个问题,您似乎想要这样的东西:
static readonly HashSet<string> validMilestones = new()
{
"Qualified", "Submitted", "Processing", "Funded"
};
public string LastStatus => Loans
.SelectMany(s => s.LoanMilestones)
.Select(w => validMilestones.Contains(w.Milestone) ? w.Milestone : "N/A")
.OrderByDescending(o => o.MilestoneDate)
.FirstOrDefault()?.Milestone;
顺便说一句,您的代码的第三个大问题是您正在使用字符串。枚举在语言中(实际上,在每种语言中)是有原因的:正是这个。
推荐阅读
- sql - 如何在sql server中的一行添加列?
- python - 在 python 中使用 cv2 使用 Google Cloud Vision API 从图像中提取文本
- image-processing - 如何“清理”旧纸质文件?
- sql-server - 更改所有查询的事务隔离级别
- angular - 如何以角度实现自己的“自定义组件”列表
- c# - 是否有任何约定或内置概念如何注入 Json 序列化程序?
- php - 继承的函数不访问子类的私有变量
- c++ - 如何将垂直纹理应用于 QT Surface3D?
- python - Python、R 和 SQL 开发人员的不同结果(二项式测试)
- tar - 在我们阅读之前删除了文件