NHIbernate(3.1) - Linq组然后按计数问题排序



我试图让一个组通过按计数排序工作,但我不断得到一个'Antlr.Runtime.NoViableAltException'被抛出。

这是我可以创建的最简单的错误案例。

var results = ArticleStatsRepository.GetAll().GroupBy(x => x.Article.ArticleId)
               .OrderBy(x => x.Count()); 

ArticleStatsRepository.GetAll() 返回 IQueryable of ArticleStats。

public class ArticleStats
{
    public virtual int ArticleStatsId { get; set; }
    public virtual Article Article { get; set; }
    public virtual User Viewer { get; set; }
    public virtual ArticleStatTypeEN ArticleStatType { get; set; }
    public virtual DateTime DateTime { get; set; }
}

最终,我希望执行以下查询。

return ArticleStatsRepository.GetAll()
                  .Where(x => x.DateTime > DateTime.Now.Add(-timeSpan))
                  .Where(x => x.ArticleStatType == ArticleStatTypeEN.View)
                  .GroupBy(x => x.Article.ArticleId)
                  .Select(x => new { ArticleId = x.Key, Count = x.Count() })
                  .OrderByDescending(x => x.Count)
                  .Join(ArticleRepository.GetAll(), artStats => artStats.ArticleId, articles => articles.ArticleId, (artStats, articles) => new MostPopularArticleResult { ArticleId = artStats.ArticleId, ArticleTitle = articles.Content.Title, Count = artStats.Count });

我正在使用引用NHibernate:3.1.0.4000的Fluent NHibernate 1.2.0.712。

任何帮助将不胜感激!

问候

史蒂夫

更新:这就是我解决这个问题的方式。不完美,因为我不想开始使用 HQL 及其 QueryOver,并且希望始终坚持使用 IQueryable。

    public virtual IQueryable<MostPopularArticleResult> GetMostPopularArticleResults(TimeSpan timeSpan, IQueryable<Article> filteredArticles, List<ArticleStatTypeEN> types, int take)
    {
        var results = ArticleStatsRepository.GetAllQueryOver().Where(x => x.DateTime > DateTime.Now.Add(-timeSpan));
        results = results.Where(x => x.ArticleStatType.IsIn(types));
        var articleIdsWithCounts = results.Select(
                    Projections.Group<ArticleStats>(x => x.Article.ArticleId),
                    Projections.Count<ArticleStats>(x => x.Article.ArticleId))
                    .OrderBy(Projections.Count<ArticleStats>(x => x.Article.ArticleId))
                    .Desc
                    .Take(take)
                    .List<object[]>()
                    .Select(x => new { ArticleId = (int)x[0], Count = (int)x[1] });
        return articleIdsWithCounts.Join(filteredArticles, artStats => artStats.ArticleId, articles => articles.ArticleId, (artStats, articles) => new MostPopularArticleResult { ArticleId = artStats.ArticleId, ArticleTitle = articles.Content.Title, Count = artStats.Count })
            .AsQueryable();
    }
正如

@mynkow和@Chris S所说,这是一个NH 3.1问题。您可以更新库版本或查看有关 simila 问题的问题:

http://sourceforge.net/p/nhibernate/mailman/nhibernate-issues/

Nhibernate 3 Linq 抛出 Antlr.Runtime.NoViableAltException

NHibernate Query,使用 OfType 和子查询

NHibernate 3.1 与 Linq 的迁移问题

相关内容

  • 没有找到相关文章

最新更新