Linq从列表中删除字符串

本文关键字:删除 字符串 列表 Linq | 更新日期: 2023-09-27 18:27:28

当我单击名称列表中的链接时,我希望将其从列表中删除。我搜索了很多关于LINQ的信息,似乎RemoveAll应该完成这项工作,但当我调用控制器中的Action时,我收到了这个烦人的消息:

传递到字典中的模型项的类型为"System.Int32",但此字典需要类型为的模型项'System.Collections.Generic.IEnumerable `1[System.String]'。

如果我正确地解释了这一点,我将尝试将INT传递给Action方法!?

这是模型中的字符串列表:

public static List<string> listOfNames = new List<string>();

这是html操作链接(我也测试过使用查询字符串):

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.ActionLink(item, "DeleteNameList", new { Id = item })
        </td>
    </tr>
}

这是控制器中的操作方法:

public ActionResult DeleteNamelist(string nameToDelete)
{
    return View("NameInput", NameModel.listOfNames.RemoveAll(x => x == nameToDelete));
}

Linq从列表中删除字符串

您当前的代码正在执行以下操作:

public ActionResult DeleteNamelist(string nameToDelete)
{
    int numRemoved = NameModel.listOfNames.RemoveAll(x => x == nameToDelete);
    return View("NameInput", numRemoved);
}

这意味着您正在向视图传递int。你应该这样做:

public ActionResult DeleteNamelist(string nameToDelete)
{
    NameModel.listOfNames.RemoveAll(x => x == nameToDelete);
    return View("NameInput", NameModel.listOfNames);
}

我认为您的行动价值观不正确。

@foreach (var item in Model)
{
<tr>
    <td>
        @Html.ActionLink(item, "DeleteNameList", new { nameToDelete = item })
    </td>
</tr>
}

之后在控制器中使用:

public ActionResult DeleteNamelist(string nameToDelete)
{
   NameModel.listOfNames.RemoveAll(x => x == nameToDelete);
   return View("NameInput", NameModel.listOfNames);
}

其他方式:

public ActionResult DeleteNamelist(string nameToDelete)
{
    return View("NameInput", NameModel.listOfNames.Where(x => x != nameToDelete));
}