首页 > 解决方案 > Razor Page .NET Core 2.2 If + ElseIf 语句在 Lambda 表达式中不起作用

问题描述

“.OrderBy(p =>”下方的“=>”下面有一个红色波浪线,并在尝试构建时返回此错误。我想做的是根据字段内容对字段进行条件排序。我有尝试了带括号和不带括号。我已经搜索过,但由于“if”语句,这个问题有所不同。我在最后尝试了一个“else”语句,但这会使各种事情变红。

“并非所有代码路径都在 'Func' 类型的 lambda 表达式中返回一个值”,然后在我添加“else return 3”后出现错误:“带有语句体的 lambda 表达式无法转换为表达式树。”

public List<OESAC.Models.BoardMembers> BoardMembers { get; set; }


public async Task OnGetAsync()
{          


 BoardMembers = await _context.BoardMembers
        .Select(p => new OESAC.Models.BoardMembers
        {
            WholeName = p.WholeName,
            Office = p.Office,
            Email = p.Email,
            Representing = p.Representing,
            WebDisplaySection = p.WebDisplaySection,
            Employer = p.Employer
        }).Where(p => p.WebDisplaySection == "Officers").OrderBy(p =>
        {
            if (p.Office == "President")
                return 0;
            else if (p.Office == "Vice-President")
                return 1;
            else if (p.Office == "Secretary-Treasurer")
                return 2;
        }).ToListAsync();

标签: c#entity-frameworklinqwhere-clause

解决方案


我替换了这个:

.OrderBy(p =>
        {
            if (p.Office == "President")
                return 0;
            else if (p.Office == "Vice-President")
                return 1;
            else if (p.Office == "Secretary-Treasurer")
                return 2;
        }).ToListAsync();

有了这个:

.OrderBy(p => p.Office == "President" ? 0 : p.Office == "Vice-President" ? 1 : p.Office == "Secretary-Treasurer" ? 2 : 3).ToListAsync();

我希望它对某人有用。从未在其他任何地方看到过这个解决方案。


推荐阅读