C# Fluent NHibernate,其中位于空字符串上
我正在FluentNH中对C# Fluent NHibernate,其中位于空字符串上,c#,sql,.net,nhibernate,fluent,C#,Sql,.net,Nhibernate,Fluent,我正在FluentNH中对IQueryOver应用.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 ||
IQueryOver
应用.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(@""))
.Where(Restrictions.On(obj=>obj.Col1).IsNull||
限制.On(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);
}
}
公共静态类查询扩展{
公共静态IQueryOver,其中StringIsNullOrEmpty(此IQueryOver查询,表达式){
var属性=Projections.property(表达式);
var条件=限制。或(限制。IsNull(属性),
Eq(属性,string.Empty));
返回查询,其中(条件);
}
}
然后您应该能够创建如下内容:
.QueryOver<ClassType>()
.WhereStringIsNullOrEmpty(obj => obj.Col1)
.QueryOver()
.WhereStringIsNullOrEmpty(obj=>obj.Col1)
Kay。看起来要详细得多。ORM将“
转换为NULL
”有什么具体原因吗?@Andreaserikson对此不确定。我从未见过这种情况。您使用的是哪个版本的NHibernate?你确定代码是这样的吗?