NHibernate Criteria Filtering

时间:2013-12-05 09:37:44

标签: nhibernate nhibernate-criteria

我使用此代码来过滤数据库记录

if (!string.IsNullOrEmpty(_searchCriteria.MessageType))
        {
            var messageType = (AutotransferMessageType)Enum.Parse(typeof(AutotransferMessageType), _searchCriteria.MessageType, true);
            if (Enum.IsDefined(typeof(AutotransferMessageType), messageType))
            {
                criteriaQuery.CreateAlias("AutotransferInputRecord", "AutotransferInputRecord")
                    .Add(
                        Restrictions.Eq(
                            "AutotransferInputRecord." + AutotransferLogSearchCriteria.MessageTypePropertyName,
                            messageType));
            }
            else
            {
                criteriaQuery.Add(Restrictions.IsNull("AutotransferInputRecord"));
            }
        }

AutotransferMessageType是可枚举类型

public enum AutotransferMessageType
    {
        [DisplayName("MT202")]
        [DatabaseName("MT202")]
        MT202,
        [DisplayName("MT210")]
        [DatabaseName("MT210")]
        MT210,
            //...
}

例如,当我输入MT202时,我的过滤器输出结果。 (这是正确的行为) 当我只输入数字时,例如202,我没有得到任何结果(这也是正确的行为)。 但是当我尝试输入某些行时,“mt”,例如,我得到错误 发生了意外的应用程序错误:
“未找到'请求的值'mt'。”

当我输入一行时,如何使滤镜不显示任何结果?

1 个答案:

答案 0 :(得分:1)

您的错误来自解析枚举的行。请改用Enum.TryParse:

AutotransferMessageType msgEnum;
var enumPrasedOk = Enum.TryParse(_searchCriteria.MessageType, true, out msgEnum);
if(enumPrasedOk){
    //Do something
}else{
    //Handle case where enum was not found for some reason (if need be)
}

另请注意,您不能使用它的描述以这种方式查找枚举(在您的情况下它们是相同的,所以没关系。)