在没有使用Where()的情况下使用GroupBy()和Timeout()时出现NotSupportedException异常。

3
我正在尝试使用无状态会话执行以下查询。
var products = session.Query<Product>().Timeout(5 * 60)
                .GroupBy(p => p.ProductType)
                .Select(p => new {ProductType = e.Key, Count = e.LongCount()}).ToList();

这会导致NotSupportedException异常,但是以下代码可以正常工作。
var products = session.Query<Product>().Timeout(5 * 60)
                .Where(p => true)
                .GroupBy(p => p.ProductType)
                .Select(p => new {ProductType = e.Key, Count = e.LongCount()}).ToList();

var products = session.Query<Product>()                    
                .GroupBy(p => p.ProductType)
                .Select(p => new {ProductType = e.Key, Count = e.LongCount()}).Timeout(5 * 60).ToList();

为什么我需要使用Where(),如果我添加Timeout(),而且为什么Timeout()在最后时它能起作用?
1个回答

0

我不太熟悉nHibernate,但我认为Timeout()方法返回的对象类型不能被GroupBy()扩展方法扩展。因此,您可以尝试进行显式转换:

var products = (IEnumerable<Product>)(session.Query<Product>().Timeout(5 * 60))
                .GroupBy(p => p.ProductType)
                .Select(p => new {ProductType = e.Key, Count = e.LongCount()}).ToList();

.Timeout() 返回的类型与 session.Query<Product>().Where() 相同,即 IQueryable<Product>。 - andy.e
@andy.e,请尝试使用AsEnumerable()方法将该对象转换为IEnumerable。在IEnumerable/IQuerable扩展和对象自身方法实现方面可能会出现一些混乱。 - Alex Skiba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接