如果ID=0,忽略.where lambda查询
本文关键字:where lambda 查询 忽略 ID 如果 | 更新日期: 2023-09-27 18:16:28
我有两个重载的方法,因为参数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子句?
感谢您的帮助和时间
private void DoSomething(int FirstVar, int SecondVar)
{
// DoSomething(FirstVar, SecondVar);
var a = GetList().Where(x=>x.FirstId == FirstVar && (SecondVar == 0 || x.SecondId == SecondVar));
}
谢谢你的编辑-你是对的- op清楚地说"当第二个变量为0时,忽略"。所以,添加一个可选的空参数实在是太离谱了。
现在这里有一个无限循环
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));
// ...
}
它与你的"if"-语句相同,但写得不同(所以可能不是你想要的,但是…):
var a = SecondVar > 0
? GetList().Where(x => x.FirstId == FirstVar && x.SecondId == SecondVar)
: GetList().Where(x => x.FirstId == FirstVar);
像这样?
var a = GetList().Where(x => (SecondVar > 0 && x.FirstId == FirstVar && x.SecondId == SecondVar) || (SecondVar <= 0 && x.FirstId == FirstVar));
Where子句中使用Nullable SecondVar
和Coalescing operator
。在这种情况下,如果您不传递SecondVar
,它将为空,并且查询将不会被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));
}