【问题标题】:LINQ Invalid arguments for Collections.Generic.List.RemoveAllCollections.Generic.List.RemoveAll 的 LINQ 参数无效
【发布时间】:2016-10-04 18:33:46
【问题描述】:

我有这个方法告诉我我有一些无效的参数,我试图从我的List<SelectListItem> 对象调用RemoveAll。我只需要根据一个简单的条件从下拉列表中删除一些项目。

public JsonResult GetExportTables(CaseListDynExport objCaseListDynExport)
{
    List<SelectListItem> lstExportTablesList = new List<SelectListItem>();
    try
    {
        CaseListDynExportBLL objCaseListDynExportBLL = new CaseListDynExportBLL();

        DataTable dtExportTables = objCaseListDynExportBLL.GetExportTables(objCaseListDynExport);

        lstExportTablesList = DropDownHelper.GetSelectListItem("TableName", "TableExportCode", null, dtExportTables);

        if (objCaseListDynExport.someCondition)
            lstExportTablesList.RemoveAll(lstExportTablesList.Where(l => l.Text.IndexOf("Audit") >= 0));
    }
    catch (Exception ex)
    {
        LogUtility.ErrorException(ex);
    }

    return Json(lstExportTablesList, JsonRequestBehavior.AllowGet);
}

我一定遗漏了一些非常明显的东西,但我无法发现我做错了什么。

我看过这些帖子:

但是是的;无法发现我做错了什么......

【问题讨论】:

  • 你错过了一个事实,RemoveAll 不接受列表,而是 Predicate 作为参数。

标签: c# .net linq


【解决方案1】:

应该是:

lstExportTablesList.RemoveAll(l => l.Text.IndexOf("Audit") >= 0);

因此,您将 lambda 方法直接传递给 RemoveAll 方法以检查条件。

具有相同功能的更简洁的方法是:

lstExportTablesList.RemoveAll(l => l.Text.Contains("Audit"));

【讨论】:

  • 呃,谢谢。我正在查看Remove 示例,其中在参数中有lst.Where 然后没有注意到其他调用的区别......其中一天:(
  • 我会在 8 分钟内完成 ;)
  • 我不知道有时间延迟 :) 15 分钟我看到meta.stackexchange.com/questions/50697/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多