簡體   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