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))
在 Product 表中,我只存储了 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;
}
这将允许我比较 Version 对象,但是如何让 NHibernate 理解它并生成正确的 SQL?
最佳答案
这是不可能的。您将不得不为每个 Version
组件显式编写比较,或者在客户端进行过滤。
关于c# - NHibernate 和运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6789030/