这个Linq查询的哪一部分对nHibernate无效?

时间:2014-01-13 15:46:52

标签: c# oracle linq nhibernate fluent-nhibernate

我有一个类似于下面的查询,我得到一个NotSupportedException(“不支持指定的方法”)。但是,如果我在Distinct()执行它,然后在内存中执行其余操作,一切都很好。

MySession.Query<Person>()
  .Where(person => person.StatusId == 1)
  .Select(person => person.Address)
  .Distinct()                     // .ToList() here fixes it.
  .OrderBy(address => address.Addr1)
  .ToList();

我是否在这里为nHibernate的Linq提供商做了非法的事情?如果是这样,任何想法如何操纵,以便我仍然可以在服务器端执行延迟的方式运行它?最终,我的查询(Distinct()以及之前的所有内容)都从执行OrderByToList的代码中抽象出来。

我正在使用:

  • Fluent 1.3.0.733
  • nHibernate 3.3.3.4001
  • odp.net.x64(and86).112.3.0
  • .NET 4.0完整框架
  • VS2010

2 个答案:

答案 0 :(得分:1)

NHibirnate在使用DISTINCT和ORDER BY http://www.ienablemuch.com/2010/12/performing-order-by-on-distinct-on-linq.html

方面有局限性

答案 1 :(得分:0)

我对@Backs指出的nHibernate限制的解决方法是避免Distinct调用,而是通过投影进行查询。这是另一种查询:

MySession.Query<Address>
  .Where(addr =>
    MySession.Query<Person>()
    .Where(person => person.StatusId == 1)
    .Any(person => person.Address == addr));

(至少,我认为如果我没有从我们的真实代码中进行任何拼写转换,那么这是等效的查询。)