NHibernate和运算符重载

Ale*_*sev 9 c# nhibernate

public class Version
{
    public byte Major { get; set; }
    public byte Minor { get; set; }
    public short Build { get; set; }
    public int Revision { get; set; }

    private long NumVersion
    {
        //get {}
        //set {}
        //Some logic that make Int64 number that represents this verion
    }
}
Run Code Online (Sandbox Code Playgroud)

假设我希望能够编写类似的查询

Where<Product>(t=>t.Version > new Version(1,2,0,0))

在Product表中,我只存储Int64 NumVersion字段,因此Version属性被映射为组件,目前我查询它 Where<Product>(t=>t.Version.NumVersion > new Version(1,2,0,0).NumVersion)

在C#中,我可以1.重载比较运算符,2.使其隐式转换为:

public static implicit operator long(Version v)
{
    return v.NumVersion;
}
Run Code Online (Sandbox Code Playgroud)

这将允许我比较Version对象,但是如何让NHibernate理解这一点并生成正确的SQL?

Ant*_*lev 1

是不可能的。您必须Version在客户端显式编写每个组件或过滤器的比较。