无法将lambda表达式转换为'bool'类型,因为它不是委托类型?

1 c# asp.net-mvc lambda

我正在研究MVC,它向用户显示请求列表.该模型看起来像这样:

public class RequestModel 
{
    public string Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器看起来像这样:

public ActionResult Index()
{
    return View(db.Requests.ToList());
}
Run Code Online (Sandbox Code Playgroud)

我希望索引视图页面显示状态为"待定"的请求列表,我尝试使用以下代码:

<table class="table">
    @foreach (var item in Model)
    {
        <tr>
            <td>
                @if (modelItem => item.Status == "Pending")
                {
                    @Html.DisplayFor(modelItem => item.Status)
                }
            </td>
        </tr>
    }
</table>
Run Code Online (Sandbox Code Playgroud)

但是,这给了我以下错误:

无法将lambda表达式转换为"bool"类型,因为它不是委托类型.

我不确定这些错误意味着什么,以及如何解决它.如果有人有任何帮助或建议我会非常感激.

teo*_*kot 5

你的病情应该是这样的:

@if (item.Status == "Pending")
Run Code Online (Sandbox Code Playgroud)

您正在尝试使用lambda表达式(modelItem => item.Status == "Pending"),您应该使用简单条件.

  • @Saneeshkunjunni 你是什么意思? (2认同)

Gil*_*een 5

通过编写此代码,modelItem => item.Status == "Pending"您定义了一个函数:

Func<string,bool> someFunc = (str) => str == "Pending";
Run Code Online (Sandbox Code Playgroud)

你会发现你的 if 语句看起来像下面这样,这意味着你有一个委托对象,而不是bool在 if 语句中进行评估。

if(someFunc) // causes compilation error
{
    // some code
}
Run Code Online (Sandbox Code Playgroud)

请注意,它没有调用该函数并评估布尔结果,这将是:

if(someFunc(item.Status))
{
    // some code
}
Run Code Online (Sandbox Code Playgroud)

要更正它,请删除modelItem =>


如果在视图中您始终希望项目具有“待处理”状态,请考虑将过滤逻辑移至控制器,但Where在返回的集合上添加一个子句。