![](/img/trans.png)
[英]How to avoid checking particular 'linq where clause' if that value is “any”?
[英]How to include any enum value in property with Linq where clause
我在下面有這個 Linq 語句,其中 calendarParams.RegisteredType 是一個可為空的 int。 在倒數第二行中,如果沒有值,我將值設置為 null,如果值為 null,我如何將其設置為任何(枚舉)值?
var registrants = await _dbContext.Registrants
.Where(p => p.EventDate.Month == calendarParams.Date.Month
&& p.EventDate.Year == calendarParams.Date.Year
&& p.UserId == userId
&& (p.RegistrantType == (calendarParams.RegisteredType.HasValue ? (RegistrantType)calendarParams.RegisteredType : null)))
.ToListAsync();
據我了解,您不能在 LinQ 內部這樣做,因為它不接受任何類型的集成功能或結構。 所以對我來說更簡單的方法是克服 LinQ 之外的問題
int? myvalue = calendarParams.RegisteredType.HasValue ? (RegistrantType)calendarParams.RegisteredType : null;
var registrants = await _dbContext.Registrants
.Where(p => p.EventDate.Month == calendarParams.Date.Month
&& p.EventDate.Year == calendarParams.Date.Year
&& p.UserId == userId
&& p.RegistrantType == myvalue)
.ToListAsync();
順便說一句,我不明白你在做什么“HasValue”檢查默認值是否為空。 但我做的完全一樣,只是為了說明原理。
我想出了我需要做什么。 這是我的答案。
var query = _dbContext.Registrants
.Where(p => p.EventDate.Month == calendarParams.Date.Month && p.EventDate.Year == calendarParams.Date.Year && p.UserId == userId)
.Select(f => f);
if (calendarParams.RegisteredType.HasValue) {
query = query.Where(p => p.RegistrantType == (RegistrantType)calendarParams.RegisteredType);
}
var registrants = await query.ToListAsync();
如果我正確理解您的意圖,您也可以將原始表達式中的倒數第二行更改為以下內容:
&& (!calendarParams.RegisteredType.HasValue || p.RegistrantType == (RegistrantType)calendarParams.RegisteredType))
如果calendarParams.RegisteredType
沒有值(--> 謂詞的第一部分為true
),它只是跳過p.RegistrantType == (RegistrantType)calendarParams.RegisteredType
過濾步驟。
為了更清楚,也許您可以將第一個表達式分配給一個變量:
var allowAllTypes = !calendarParams.RegisteredType.HasValue;
var registrants = await _dbContext.Registrants
.Where(p => p.EventDate.Month == calendarParams.Date.Month
&& p.EventDate.Year == calendarParams.Date.Year
&& p.UserId == userId
&& (allowAllTypes || p.RegistrantType == (RegistrantType)calendarParams.RegisteredType))
.ToListAsync();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.