我正在尝试编写共享的查询布局,这些查询共享相似的限制和结果集,但报告中的得分属性除外。我作为lambda表达式传递得分属性,我可以在选择中使用它,但Where()给了我悲伤。
关于make Where()的任何想法都适用于表达式func 或者如何使用指向要比较的属性的另一个表达式func来编写Where()可接受的表达式?
private void SomeMethod(Expression<Func<TDischargeResult, object>> field)
{
TBenchmark benchmark = null;
AnalyticsReport report = null;
IEnumerable<AnalyticsReport> reports = _session.QueryOver<TDischargeResult>()
.JoinAlias(record => record.Benchmark, () => benchmark)
//.Where(field > benchmark.Average) // compare score property to average
.SelectList(select =>
{
select.SelectAvg(field).WithAlias(() => report.Score);
return select;
}).Clone()
.TransformUsing(Transformers.AliasToBean<AnalyticsReport>())
.List<AnalyticsReport>();
}
答案 0 :(得分:0)
我可以提出另一种方法:
_session.QueryOver<TDischargeResult>()
.JoinQueryOver(x=>x.Benchmark)
.Where(x=>field>x.Average)
其余的代码。