首页 > 解决方案 > 如果在 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;
        }
    } 

标签: c#linq

解决方案


您的代码的第一个大问题是您正在为初始数组中的每个项目创建和填充一个全新的列表。第二个大问题是您正在临时数组中进行线性搜索。考虑到这两个问题,您似乎想要这样的东西:

        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;

顺便说一句,您的代码的第三个大问题是您正在使用字符串。枚举在语言中(实际上,在每种语言中)是有原因的:正是这个。


推荐阅读