sql – NHibernate linq – 在映射时使用lambda表达式代替formul
发布时间:2020-12-12 06:45:04 所属栏目:MsSql教程 来源:网络整理
导读:NHibernate在名为“formula”的映射配置中的属性元素上有一个属性,它允许注入sql来“计算”一个属性.我遇到的问题是直接使用sql语法的公式.有没有办法让nhibernate. linq使用lambda表达式而不是使用公式属性. 我有以下内容: public class Invoice{ public vi
NHibernate在名为“formula”的映射配置中的属性元素上有一个属性,它允许注入sql来“计算”一个属性.我遇到的问题是直接使用sql语法的公式.有没有办法让nhibernate.
linq使用lambda表达式而不是使用公式属性.
我有以下内容: public class Invoice { public virtual int Id { get; protected set; } public virtual decimal Amount { get; set; } public virtual decimal Paid { get; set; } public virtual decimal Balance { get { return BalanceExpression.Expression.Compile().Invoke(this); } } } public class BalanceExpression { public static Expression<Func<Invoice,decimal>> Expression { get { return i => i.Amount - i.Paid; } } } <class name="Invoice"> <id name="Id"> <generator class="hilo"/> </id> <property name="Amount"/> <property name="Paid"/> <property name="Balance" formula="Amount - Paid" access="readonly"/> </class> 我希望nhibernate使用balanceexpression.expression而不必将sql语法放在公式属性中,这样我就可以从映射配置中删除公式属性并按如下方式编写查询: 来自i的session.linq() 如何将balanceexpression.expression注入linq查询? 解决方法由于您已在对象上具有Amount和Paid属性,因此您只需将Balance属性定义为常规属性:public int Balance { get { return Amount - Paid; } } 如果您没有将Amount / Paid属性设置为’Lazy’,我认为这是最好,最易读和最易维护的解决方案. invoices.Where(i => i.Balance > 5) 会导致集合中每个Invoice的数据库访问.这可能仍然是你可以接受的,只要知道这一点..干杯的Jhonny (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |