1 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個贊
請嘗試:
.Where(x =>
(x.AccountId == (int)viewModel.AccountId || x.AccountId == null)
&& (x.CompanyId == (int)viewModel.CompanyId || x.Company == null)
&& (x.FacilityId == (int)viewModel.FacilityId || x.FacilityId == null)
)
藝術(shù)
var accountId = viewModel.AccountId.GetValueOrDefault();
var companyId = viewModel.CompanyId.GetValueOrDefault();
var facilityId = viewModel.FacilityId.GetValueOrDefault();
...
...
.Where(x =>
(x.AccountId == accountId || x.AccountId == null)
&& (x.CompanyId == companyId || x.Company == null)
&& (x.FacilityId == facilityId || x.FacilityId == null)
)
您的原始查詢引用可為 null 的類型作為參數(shù),因此,EF 需要生成一個謂詞,該謂詞能夠在參數(shù)值為 null 時以可預(yù)測的方式工作,這就是為什么您將看到額外的 .通過將參數(shù)轉(zhuǎn)換為查詢中的下劃線類型(在本例中),EF 將看不到執(zhí)行此操作的必要性,因?yàn)樗罢J(rèn)為”參數(shù)不能為 null。([Extent1].[AccountId] IS NULL) AND (@p__linq__0 IS NULL)System.Int32
所有這些都是必需的,因?yàn)槟J(rèn)情況下,SQL Server 連接將啟用該選項,這意味著與 的任何比較都將是 false,這就是 EF 需要生成此額外邏輯(運(yùn)算符)的原因,以確保在參數(shù)值為 null 時可以獲得可預(yù)測的結(jié)果。ANSI_NULLSNULLIS NULL
您可以嘗試此操作以查看操作中的效果:ANSI_NULLS
SET ANSI_NULLS ON;
SELECT 1 WHERE NULL = NULL;
SET ANSI_NULLS OFF;
SELECT 1 WHERE NULL = NULL;
- 1 回答
- 0 關(guān)注
- 96 瀏覽
添加回答
舉報