【问题标题】:Can we add LINQ where condition of method parameters我们可以在方法参数的条件下添加 LINQ
【发布时间】:2021-03-05 10:01:23
【问题描述】:

以下是我在某些条件下使用的现有方法

public List<MenuItem> getTopMenu(List<Role> Id)
{

 // here many lines code for checking id value
}

我正在更改上述方法以检查方法参数内部的条件,如下所示,但代码无效

public List<MenuItem> getTopMenu(List<Role> Id.Where(r=>r.status=="Active"))
{

}

错误来了,我只需要在方法中传递活动 id,我不能单独写入每个方法。

【问题讨论】:

  • 我的困惑:即使您可以编写一个过滤器作为参数的一部分,这与在方法本身中编写它有什么不同?
  • 你想达到什么目的?当列表中有非活动项时停止调用方法,或者在方法中过滤列表?
  • 每次一个活跃的id都会出现一个不活跃的id,请建议如何实现。 @约翰
  • 再次:是什么阻止你在方法中这样做?
  • 我们如何在 mehtod 中编写代码? @约翰

标签: c# asp.net asp.net-mvc linq


【解决方案1】:

我认为最好在方法中添加默认参数 (status="Active") 并像下面这样使用它。

  • 此外,如果您想稍后查询其他状态,这也使您的方法更有用。
public List<MenuItem> getTopMenu(List<PersonRoleDTO> Id, string status="Active")
{
   var query = Id.Where(r=>r.status==status); 
   
   //your logic
}

【讨论】:

    【解决方案2】:

    在方法内移动过滤器:

    public List<MenuItem> getTopMenu(List<PersonRoleDTO> Id)
    {
        Id = Id.Where(r=>r.status=="Active").ToList();
        // Whatever else
    }
    

    您不能将语句作为方法的参数。

    【讨论】:

      【解决方案3】:

      这是语法和设计问题。 语法:

      • 您不能将条件作为没有意义的参数传递。

      设计:

      • 您有多种方法可以做到这一点。我的两个建议是,您可以有一种方法来返回谓词以仅获取活动的“角色”:

        private Func OnlyActiveRoles(IList roles) => r => r.status == "Active";

        或者您可以在调用这些方法之前过滤角色列表。

      【讨论】:

      • 对以前的答案很好的补充。
      猜你喜欢
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多