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