當使用Devart DotConnect for PostgreSQL連接器查詢實體框架實體時,我觀察到一個奇怪的行爲。如何使用DotConnect for PostgreSQL查詢實體框架實體的空字段值
例如:如果我提出的2個以下測試:
var test1 = context.blocs.Where(x => x.id_bloc == null); var test2 = context.blocs.Where(x => x.id_bloc == 100);
當EF自動生成的SQL查詢我得到如下結果檢查:
結果爲TEST1:
{SELECT CAST(NULL AS int) AS "C1", CAST(NULL AS varchar) AS "C2", CAST(NULL AS varchar) AS "C3", CAST(NULL AS varchar) AS "C4" FROM (SELECT 1 AS X) AS "SingleRowTable1" WHERE true = false}
測試2的結果:
{SELECT "Extent1".id_bloc, "Extent1".numero, "Extent1".nom, "Extent1".titre FROM "role".bloc AS "Extent1" WHERE "Extent1".id_bloc = 100}
結果查詢空場時,很奇怪......我期待類似於測試2的結果,但與"Extent1".id_bloc IS NULL
WHERE子句...
它是一個錯誤的結果?我怎樣纔能有效地查詢空字段?
您是否嘗試過'Where(x =>!x.id_bloc.HasValue)'? (但老實說,我希望它會創建相同的SQL。) – Slauma
我不知道這個查詢提供程序,但它是否將數據庫字段'id_bloc'映射到可空類型,而在數據庫中它不是?當謂詞肯定評估爲「假」時,它可能決定創建一個便宜的虛假查詢。如果你自己輸入'Where(x => true == false)'會發生什麼? –
你說得對,生成了一個虛擬查詢,因爲我試圖評估一個不可爲空的屬性是否爲空......謝謝 –