Если у меня есть столбец, который можно обнулять:
CREATE TABLE SometTable(CanBeNull INT);
И я запрашиваю с помощью nHibernate:
int? i = null;
context.Query<SomeTable>().Where(CanBeNull == i);
int? i = 2;
context.Query<SomeTable>().Where(CanBeNull == i);
В этих двух запросах первый возвращает только те записи, в которых CanBeNullравно нулю, а вторая возвращает записи, где CanBeNull = 2?
Любопытно узнать, нужно ли мне добавлять дополнительный код для фактора, когда мой обнуляемый равен нулю, потому что я хочу, чтобы база данных NULL указывала (видимая для всех) и значение в этой строке, чтобы указывать (видимая только длячеловек с идентификатором X)
Data, VisibleTo
abcd, NULL --visible to anyone
efgh, 123 --visible only to id 123
И я хочу, чтобы мой c # null означал «идентификатор человека не был передан», поэтому, если i
равен нулю, я покажу только abcd
, а если i
=123, тогда я покажу обе строки
Следовательно, я мог бы либо:
//if NH will emit `IS NULL` or `=@p0` accordingly
.Where(r => r.VisibleTo == null || r.VisibleTo == i);
//if NH will naively emit `=@p0` and set `@p0=null` where `i` is null
.Where(r => r.VisibleTo == null || (i.HasValue && r.VisibleTo == i.Value));