我有一个类似于下面的查询,我得到一个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()
以及之前的所有内容)都从执行OrderBy
和ToList
的代码中抽象出来。
我正在使用:
答案 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));
(至少,我认为如果我没有从我们的真实代码中进行任何拼写转换,那么这是等效的查询。)