流利的 NHibernate Where on 空字符串
Fluent NHibernate Where on Empty String
我在 FluentNH 中对 IQueryOver<T,T>
应用 .Where()
-限制,因此:
.Where(x => x.Col1 == null || x.Col1 == "");
生成以下 SQL:
WHERE (Col1 IS NULL OR Col1 = NULL)
如何让 NH 理解空字符串表示空字符串?
您可以这样写 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)
我在 FluentNH 中对 IQueryOver<T,T>
应用 .Where()
-限制,因此:
.Where(x => x.Col1 == null || x.Col1 == "");
生成以下 SQL:
WHERE (Col1 IS NULL OR Col1 = NULL)
如何让 NH 理解空字符串表示空字符串?
您可以这样写 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)