そのようなクエリでは:
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
( )自体の比較: 「(QueryException):NHibernate.Criterion.SimpleExpressionの型の不一致:LetterType期待される型System.Int32、実際の型Faraconesh.EnterpriseAppUnits.OfficeAutomation.BusinessEntities.LetterType、」エラーが発生するLetterType
ため、これも不可能です。l.LetterType == LetterType.Internal
。
3-比較対象: 「(NotImplementedException):メソッドToInt32が実装されていません。」エラーが発生するInt32
ため、まだ不可能です。Convert.ToInt32(l.LetterType)
では、LINQ-to-NHibernateの列挙型をどのように比較できますか?この問題はLINQ-to-NHibernateに固有ですか、それともすべてのLINQユーザーがそのような問題を抱えていますか?
ここでのUPDATE2 は、クラス、列挙型、およびマッピング(要約)です。
public class Letter
{
private LetterType _letterType;
public LetterType LetterType
{
set
{
_letterType = value;
}//end
get
{
return _letterType;
}//end
}
}
=========
public enum 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>