第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實(shí)體框架 linq 到 sql 的轉(zhuǎn)換問題

實(shí)體框架 linq 到 sql 的轉(zhuǎn)換問題

C#
慕姐4208626 2022-08-20 16:55:52
使用 EF6/linq to SQL 來獲得所需的結(jié)果。我寧愿不必在數(shù)據(jù)庫中創(chuàng)建視圖。關(guān)于為什么EF以這種方式轉(zhuǎn)換它或如何以其他方式欺騙它的任何想法?我的 linq 謂詞:.Where(x =>    (x.AccountId == viewModel.AccountId || x.AccountId == null)   && (x.CompanyId == viewModel.CompanyId || x.Company == null)   && (x.FacilityId == viewModel.FacilityId || x.FacilityId == null))生成的 SQL:WHERE    (([Extent1].[AccountId] = 1)     OR (([Extent1].[AccountId] IS NULL) AND (1 IS NULL))     OR ([Extent1].[AccountId] IS NULL)   )    AND    (    ([Extent1].[CompanyId] = 11)     OR (([Extent1].[CompanyId] IS NULL) AND (11 IS NULL))     OR ([Extent2].[Id] IS NULL)   )    AND    (    ([Extent1].[FacilityId] = 1)     OR (([Extent1].[FacilityId] IS NULL) AND (1 IS NULL))     OR ([Extent1].[FacilityId] IS NULL)   )     AND    (    ([Extent1].[FacilityId] = 1)     OR (([Extent1].[FacilityId] IS NULL) AND (1 IS NULL))   )我以為我會得到的SQL,并且確實(shí)達(dá)到了預(yù)期的結(jié)果:WHERE (    ([Extent1].[AccountId] = 1)     OR ([Extent1].[AccountId] IS NULL)) AND (    ([Extent1].[CompanyId] = 11)     OR ([Extent2].[Id] IS NULL)) AND (    ([Extent1].[FacilityId] = 1)     OR ([Extent1].[FacilityId] IS NULL)) 
查看完整描述

1 回答

?
慕田峪4524236

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;


查看完整回答
反對 回復(fù) 2022-08-20
  • 1 回答
  • 0 關(guān)注
  • 96 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號