1
我有一個SQL查詢,我試圖轉換爲實體框架表達式。其中一個連接子句對null進行了測試,我不確定如何在EF中表示它。這裏是SQL查詢,發現實際參加有多個條件:實體框架加入空條件
SELECT T1.*
FROM product T1
INNER JOIN T2 ON T1.pk1 = T2.fk1
INNER JOIN T3 ON T2.pk2 = T3.fk2 AND T3.x IS NULL <-- this is the issue
出於對一些簡單的盲目的希望,我想這EF表達:
from t1 in ctx.T1
join t2 in ctx.T2 on t1.pk1 equals t2.fk1
join t3 in ctx.T3 on t2.pk2 equals t3.fk2 && t3.x == null
select t1
編譯器不喜歡&& t3.x == null
部分。它說
錯誤CS0019操作員「& &」不能應用於類型「詮釋」和「布爾」的操作數
所以,我想這(注意T3.x是一個可空日期字段):
from t1 in ctx.T1
join t2 in ctx.T2 on t1.pk1 equals t2.fk1
join t3 in ctx.T3 on new { A = t2.pk2, B = null as DateTime? } equals new { A = t3.fk2 && B = t3.x }
select t1
其編譯,但是當我運行它,我得到
無法創建類型爲「System.Object」的空常量值。在此上下文中僅支持實體類型,枚舉類型或基本類型。
那麼我該如何去做呢?
更新:正如Ivan Stoev指出的那樣,問題是我使用null as DateTime?
而不是(DateTime?)null
。因此,工作查詢看起來是這樣的:
from t1 in ctx.T1
join t2 in ctx.T2 on t1.pk1 equals t2.fk1
join t3 in ctx.T3 on new { A = t2.pk2, B = (DateTime?)null } equals new { A = t3.fk2 && B = t3.x }
select t1
謝謝,看起來我不得不使用新的{A = t2.pk2,B =(DateTime?)null}'而不是新的{A = t2.pk2,B = null作爲DateTime? }' – d512