我正在尝试返回给定属性不为空的所有实体。
问题是IsNotEmpty()
仅适用于集合。以下是我到目前为止采用的一般方法,显然不起作用。
ICriteria lvCriteria = NHibernateHelper.GetCurrentSession()
.CreateCriteria(typeof(FunctionCall))
.SetMaxResults(100)
.AddOrder(Order.Desc("LogId"));
if (pvMsg.HasValue)
{
lvCriteria.Add(Restrictions.IsNotNull("Msg"))
.Add(Restrictions.IsNotEmpty("Msg"));
}
有什么建议吗?是否可以通过检查属性值的长度来实现此结果?谢谢!
答案 0 :(得分:4)
最后,我发现了我正在寻找的组合!
lvCriteria.Add(Restrictions.Not(Expression.Eq("Msg", string.Empty)));
限制和表达的这种组合按预期工作;缩小所有空字符串。我不知道为什么我不能提前达到这些结果,即使:
lvCriteria.Add(Restrictions.Not(Restrictions.Eq("Msg", string.Empty)));
感谢所有尝试过的人。
答案 1 :(得分:0)
我相信你在寻找:
.Add(Expression.IsNotEmpty("PropertyName"));
和
.Add(Expression.IsNotNull("PropertyName"));
答案 2 :(得分:0)
以下是我的映射和类定义:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" assembly="Domain" namespace="Assembly.Domain">
<class name="Assembly.Domain.FunctionCall, Domain" lazy="false" table="FunctionCallLog">
<id name="LogId" column="LogId">
<generator class="native" />
</id>
<property name="LogTime" column="LogTime" />
<property name="Username" column="Username" />
<property name="CallerIp" column="CallerIp" />
<property name="FunctionName" column="FunctionName" />
<property name="Parameters" column="Parameters" />
<property name="Msg" column="Msg" />
<property name="FileName" column="FileName" />
<property name="TimeSpan" column="TimeSpan" />
</class>
</hibernate-mapping>
using System;
namespace Assembly.Domain
{
public class FunctionCall
{
public int LogId { get; set; }
public DateTime LogTime { get; set; }
public string Username { get; set; }
public string CallerIp { get; set; }
public string FunctionName { get; set; }
public string Parameters { get; set; }
public string Msg { get; set; }
public string FileName { get; set; }
public int TimeSpan { get; set; }
}
}
答案 3 :(得分:0)
试试这个:
ICriteria lvCriteria = NHibernateHelper.GetCurrentSession()
.CreateCriteria(typeof(FunctionCall))
.SetMaxResults(100)
.AddOrder(Order.Desc("LogId"));
if (pvMsg.HasValue)
{
lvCriteria.Add(Restrictions.IsNotNull("Msg"))
.Add(Restrictions.Not(Restrictions.Eq("Msg", ""));
}
可能有更紧凑的表达方式。