在这样的查询中:
var q = from l in session.Linq<Letter>()
where
letterTypeSearch == null ? true :
(l.LetterType.ToString() == letterTypeSearch)
l.LetterType 是一个枚举。
更新
似乎不可能比较当前 linq-to-nhibernate 中的枚举。虽然 letterTypeSearch 是一个包含ed 且继承自的LetterType
实例的字符串,但有 3 种比较方式:ToString()
LetterType
int
1-比较String
:不可能,因为l.LetterType.ToString()
产生“(ArgumentOutOfRangeException):索引超出范围。必须是非负数并且小于集合的大小。参数名称:索引,”错误。
2- 比较Enum
( LetterType
) 本身:这也是不可能的,因为l.LetterType == LetterType.Internal
导致“(QueryException):NHibernate.Criterion.SimpleExpression 中的类型不匹配:LetterType 预期类型 System.Int32,实际类型 Faraconesh.EnterpriseAppUnits.OfficeAutomation.BusinessEntities.LetterType,”错误.
3-比较Int32
:但不可能,因为Convert.ToInt32(l.LetterType)
生成“(NotImplementedException):未实现ToInt32方法。”错误。
那么如何比较 LINQ-to-NHibernate 中的枚举呢?这个问题是 LINQ-to-NHibernate 特有的还是所有 LINQ 用户都有这样的问题?
UPDATE2 这里是类、枚举和映射(smmarized):
public class Letter
{
private LetterType _letterType;
public LetterType LetterType
{
set
{
_letterType = value;
}//end
get
{
return _letterType;
}//end
}
}
=========
公共枚举 LetterType { 传入 = 0,传出 = 1,内部 = 2,}
=========
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
<class
name="Faraconesh.EnterpriseAppUnits.OfficeAutomation.BusinessEntities.Letter,Faraconesh.EnterpriseAppUnits.OfficeAutomation.BusinessEntities"
table="OfficeAutomation_Letter">
<property
name="LetterType" column="LetterType"
type="int" update="true" insert="true" access="property"
not-null="true"/>
</class>
</hibernate-mapping>