System.NotSupportedException:如何简化NHibernate查询?

时间:2017-06-16 07:42:29

标签: c# nhibernate fluent-nhibernate

如何在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.Nullable 1[System.Decimal])([100001].Prod2.Rate), Void Add(System.Nullable 1 [System.Decimal]) ([100001] .Prod3.Rate)}”,     “exceptionType”:“System.NotSupportedException”,

如何在逻辑完美的情况下简化此查询?

1 个答案:

答案 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;