我使用此代码来过滤数据库记录
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'。”
当我输入一行时,如何使滤镜不显示任何结果?
答案 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)
}
另请注意,您不能使用它的描述以这种方式查找枚举(在您的情况下它们是相同的,所以没关系。)