[英]LINQ with conditional where clause
我有这个LINQ:
private static IQueryable<Contract> getValidContracts(DbContext context, DateTime date,int clientId)
{
return (from contract in context.Set<Contract>()
where contract.ValidityDate >= date
where contract.ClientId == clientId
select contract);
}
在LINQ中,我给出了这一行:
where contract.ClientId == clientId
我希望仅当clientId变量不等于0时,此行才会包含在where子句中。
知道如何使它优雅吗?
只需在其中添加0的检查
where ((contract.ClientId == clientId && clientId != 0) || clientId == 0)
由于客户端ID是一个外部变量,因此您可以在LINQ之外对其进行检查:
if(clientId==0)
{
return (from contract in context.Set<Contract>()
where contract.ValidityDate >= date
select contract);
}
else
{
return (from contract in context.Set<Contract>()
where contract.ValidityDate >= date
where contract.ClientId == clientId
select contract);
}
对于动态查询,最好使用流利的语法。 在这种情况下,您可以使用类似
private static IQueryable<Contract> getValidContracts(DbContext context, DateTime date, int clientId)
{
var query = context.Set<Contract>().Where(contract => contract.ValidityDate >= date);
if (clientId != 0)
query = query.Where(contract => contract.ClientId == clientId);
return query;
}
您可以将条件修改为:
where ((clientId!=0)?(contract.ClientId == clientId):true)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.