如何在NHibernate中简化以下查询?
以下是在3种不同产品之间找到最大值并按最大值排序的逻辑。
IQueryable<Property> results = ISession.Get<Property>();
results = from r in results
let pdts = new List<decimal?> { r.Prod1.Rate, r.Prod2.Rate, r.Prod3.Rate }
let max = pdts.Max()
orderby max
select r;
执行它时,NHibernate使用exceptionMessage
抛出错误System.NotSupportedException
“exceptionMessage”:“new list
1() {Void Add(System.Nullable
1 [System.Decimal])([100001] .Prod1.Rate),Void Add(System.Nullable1[System.Decimal])([100001].Prod2.Rate), Void Add(System.Nullable
1 [System.Decimal]) ([100001] .Prod3.Rate)}”, “exceptionType”:“System.NotSupportedException”,
如何在逻辑完美的情况下简化此查询?
答案 0 :(得分:3)
原因是由于List初始化,NHibernate无法从Linq生成SQL。
试试这个:
results = from r in results
let max = (r.Prod1.Rate >= r.Prod2.Rate && r.Prod1.Rate >= r.Prod3.Rate) ? r.Prod1.Rate
: (r.Prod2.Rate >= r.Prod1.Rate && r.Prod2.Rate >= r.Prod3.Rate) ? r.Prod2.Rate
: r.Prod3.Rate
orderby max
select r;