繁体   English   中英

带有条件where子句的LINQ

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM