NHibernate和运算符重载

9
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
    }
}

假设我想要编写以下查询:Where<Product>(t=>t.Version > new Version(1,2,0,0))。在产品表中,我只存储Int64 NumVersion字段,因此将Version属性映射为组件,并且目前我像这样查询它:Where<Product>(t=>t.Version.NumVersion > new Version(1,2,0,0).NumVersion)。在C#中,我可以 1.重载比较运算符,2.使其隐式转换为long类型:
public static implicit operator long(Version v)
{
    return v.NumVersion;
}

这将允许我比较版本对象,但如何使NHibernate理解并生成适当的SQL?

你需要打补丁来教NHibernate如何将版本比较转换为SQL,大概在这个区域:http://bit.ly/p3dkXy ^_^ - Arnis Lapsa
2个回答

1

可能是:

class p
{
    private p() { }

    public static p Version { get { return new p(); } }

    public static Expression<Func<Product, bool>> operator >(p left, Version version)
    {
        return product => product.Version.NumVersion > version.NumVersion;
    }
    ...
}


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

1

这是不可能的。你要么必须明确地为每个Version组件编写比较,要么在客户端进行过滤。


这个答案仍然相关吗?(NHibernate 5.2.5) - Spotted

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接