使用没有Where()的GroupBy()和Timeout()时出现NotSupportedException

时间:2014-06-09 11:45:02

标签: c# nhibernate linq-to-nhibernate

我尝试使用无状态会话执行以下查询。

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();

如果我添加Timeout(),为什么我需要Where()?如果Timeout()是最后一个,为什么它可以工作?

1 个答案:

答案 0 :(得分: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();