Nhibernate ICriteria - проверка длины значения свойства - PullRequest
3 голосов
/ 23 января 2010

Я пытаюсь вернуть все сущности, где данное свойство не пустое. Проблема в 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"));
}

Есть предложения? Можно ли достичь этого результата, проверив длину значения свойства? Спасибо!

Ответы [ 4 ]

4 голосов
/ 11 февраля 2010

Наконец, я обнаружил комбинацию, которую искал!

lvCriteria.Add(Restrictions.Not(Expression.Eq("Msg", string.Empty)));

Эта комбинация ограничений и выражений работает, как и ожидалось; сужение всех пустых строк. Я не знаю, почему я не смог достичь этих результатов раньше даже при:

lvCriteria.Add(Restrictions.Not(Restrictions.Eq("Msg", string.Empty)));

Спасибо всем, кто пытался.

0 голосов
/ 05 февраля 2010

Ниже приведены мое отображение и определение класса:

<?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; }
    }
}
0 голосов
/ 08 февраля 2010

Попробуйте это:

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", ""));
}

Может быть более компактный способ выразить это.

0 голосов
/ 25 января 2010

Я считаю, что вы ищете:

.Add(Expression.IsNotEmpty("PropertyName"));

и

.Add(Expression.IsNotNull("PropertyName"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...