我有一個帶有 WHERE 子句的 LINQ 查詢,該子句有一個有時為 NULL 的變數。當此變數為 NULL 時,即使有要獲取的結果,我也無法獲取任何結果。我發現Linq where column == (null reference) not the same as column == null并嘗試了那里提供的解決方案但沒有成功。我究竟做錯了什么?
public async Task<List<SectionNavigationMenuDTO>> GetSectionNavigationMenu(int? SectionID, bool IsAdmin = false)
{
return await _siteDbContext.SectionNavigationMenuItems
//.Where(snmi => snmi.SectionID == SectionID && snmi.IsAdminOnly == IsAdmin) //No results at all
//.Where(snmi => object.Equals(snmi.SectionID, SectionID)) //No results at all
//.Where(snmi => (snmi.SectionID == SectionID || (SectionID == null && snmi.SectionID == null))) //No results at all
//.Where(snmi => snmi.IsAdminOnly == IsAdmin) //Returns 3 results
.OrderBy(snmi => snmi.Name)
.Select(sni => new SectionNavigationMenuDTO()
{
Name = sni.Name,
URL = sni.URL
})
.ToListAsync();
}
編輯:
SectionID應該用 或 填充,int并且在null兩種情況下都有效。如果SectionID變數是,那么它應該作為 LINQ 查詢的引數NULL傳遞。資料庫確實包含帶有for 的NULL條目,并且查詢確實按預期回傳 3 個結果。NULLSectionIDSELECT * FROM dbo.SectionNavigationMenuItems WHERE SectionID IS NULL
評論最多的WHERE子句是我想要發生的(通過兩個比較),其他 3 個是我試圖讓這個作業和結果。
uj5u.com熱心網友回復:
嘗試這個:
public async Task<List<SectionNavigationMenuDTO>> GetSectionNavigationMenu(int? SectionID, bool IsAdmin = false)
{
return await _siteDbContext.SectionNavigationMenuItems
.Where(snmi => snmi.IsAdminOnly == IsAdmin && (SectionID==null || SectionID==smi.SectionID ) )
.OrderBy(snmi => snmi.Name)
.Select(sni => new SectionNavigationMenuDTO()
{
Name = sni.Name,
URL = sni.URL
})
.ToListAsync();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/537948.html
標籤:C#林克
上一篇:使用組合框更改標簽的值
