2015-05-15 4 views
1

Я применения .Where() -restriction на IQueryOver<T,T> в FluentNH, как таковой:Fluent NHibernate Где на Empty String

.Where(x => x.Col1 == null || x.Col1 == ""); 

который генерирует следующий SQL:

WHERE (Col1 IS NULL OR Col1 = NULL) 

Как я могу сделать NH понимает, что пустая строка означает пустую строку?

+0

Я этого никогда не видел. Какую версию NHibernate вы используете? Вы уверены, что код такой? – xanatos

ответ

1

Вы можете написать статью Where так:

.Where(Restrictions.On<ClassType>(obj => obj.Col1).IsNull || 
     Restrictions.On<ClassType>(obj => obj.Col1).IsLike(@"")) 

В качестве альтернативы, если вы делаете это на несколько запросов, вы должны рассмотреть вопрос о создании расширения запроса:

public static class QueryExtention { 
    public static IQueryOver<E, F> WhereStringIsNullOrEmpty<E, F>(this IQueryOver<E, F> query, Expression<Func<E, object>> expression) { 
     var property = Projections.Property(expression); 
     var criteria = Restrictions.Or(Restrictions.IsNull(property), 
             Restrictions.Eq(property, string.Empty)); 
     return query.Where(criteria); 
    } 
} 

Тогда вы должны быть в состоянии создать что-то вроде:

.QueryOver<ClassType>() 
.WhereStringIsNullOrEmpty(obj => obj.Col1) 
+0

Kay. Кажется гораздо более многословным. Есть ли какая-то конкретная причина, по которой ORM переводит '' '' в 'NULL'? –

+0

@AndreasEriksson Не уверен в этом. –