Согласен, это работает. Я обнаружил, что сгенерированный SQL для 'not in' был странным (по состоянию на 3.3.0 GA)
...
from
mytable t0_
where
case
when t0_.testValue in (
@p0 , @p1 , @p2
) then 1
else 0
end=@p3
@p0 = 9 [Type: Int32 (0)],
@p1 = 99 [Type: Int32 (0)],
@p2 = 109 [Type: Int32 (0)],
@p3 = False [Type: Boolean (0)],
...
Кажется немного странным для 'case', когда «not in» было бы яснее (не то, чтобы я планировал читать каждую строку, но, возможно, в трассе / профиле).
(... позже в тот же день ...)
Я понял, что вышеуказанный «странный» выбор SQL был только тогда, когда я использовал
.Where(e => list.Contains(e.AnID) == false)
Если бы я использовал
.Where(e => !list.Contains(e.AnID))
Сгенерированный SQL намного чище (с использованием 'not in')