如果ID = 0,则忽略.WHERE lambda查询

时间:2013-05-31 13:45:45

标签: c# asp.net linq

我有2个重载方法,因为参数SecondVar有时可用,有时不可用: -

private void DoSomething(int FirstVar)
{
    int SecondVar = 0;
    DoSomething(FirstVar, SecondVar);
}

private void DoSomething(int FirstVar, int SecondVar)
{
    DoSomething(FirstVar, SecondVar);

    if(SecondVar > 0)
    {
       var a = GetList().Where(x=>x.FirstId == FirstVar && x.SecondId == SecondVar);
    }
    else
    {
       var a = GetList().Where(x=>x.FirstId == FirstVar);
    }

}

第二个重载的DoSomething是否有可能摆脱If子句?

感谢您的帮助和时间

5 个答案:

答案 0 :(得分:6)

private void DoSomething(int FirstVar, int SecondVar)
{
    // DoSomething(FirstVar, SecondVar);
    var a = GetList().Where(x=>x.FirstId == FirstVar && (SecondVar == 0 || x.SecondId == SecondVar));    
}

感谢编辑 - 你是对的 - 操作清楚地说“当第二个var为0然后忽略”。因此,添加一个可选的可空参数只是偏离基础。

答案 1 :(得分:2)

目前你在这里有一个无限循环

private void DoSomething(int FirstVar, int SecondVar)
{
    DoSomething(FirstVar, SecondVar);

除此之外,您可以使用Nullable<int>作为参数,然后您不需要重载:

private void DoSomething(int firstVar, int? secondVar = null)
{
    var a = GetList().Where(x=> x.FirstId == firstVar &&
      (!secondVar.HasValue ||  x.SecondId == secondVar.Value));
    // ...
}

答案 2 :(得分:1)

它与你的“if”-statement相同,但写的不同(所以也许不是你想要的,但是...... :)):

var a = SecondVar > 0
                        ? GetList().Where(x => x.FirstId == FirstVar && x.SecondId == SecondVar)
                        : GetList().Where(x => x.FirstId == FirstVar);

答案 3 :(得分:0)

这样的东西?

var a = GetList().Where(x => (SecondVar > 0 && x.FirstId == FirstVar && x.SecondId == SecondVar) || (SecondVar <= 0 && x.FirstId == FirstVar));

答案 4 :(得分:0)

在Where子句中使用Nullable SecondVarCoalescing operator。在这种情况下,如果您未传递SecondVar,则它将为null,并且SecondVar不会过滤查询。

private void DoSomething(int FirstVar, int? SecondVar = null)
{
  var a = GetList()
          .Where(x=> x.FirstId == FirstVar && 
                     x.SecondId == (SecondVar?? x.SecondId));
}

如果你需要按SecondVar进行过滤,如果它只是正数那么;

private void DoSomething(int FirstVar, int SecondVar)
{
  var a = GetList()
          .Where(x=> x.FirstId == FirstVar && 
                     x.SecondId == (SecondVar > 0? SecondVar: x.SecondId));
}