【问题标题】:NHibernate 3.0 Linq Provider. Select not working after Skip and TopNHibernate 3.0 Linq 提供程序。在 Skip 和 Top 之后选择 not working
【发布时间】:2011-01-04 11:40:30
【问题描述】:

您好,我使用 NHiberante 来填充我的网络应用程序的分页和有序网格。 在我决定将投影付诸实践之前,它工作得很好。

这是原始的工作代码:

var data = repository
    .Where(predicate);
    .OrderBy(columns)
    .Skip(amount)
    .Take(anotherAmount);

然后我开始介绍我的投影并且效果也很好:

var data = repository
        .Where(predicate);
        .OrderBy(columns)
        .Select(myProjection);

我很高兴一切正常,所以我添加了缺少的 Skip 和 Take,但停止 - 现在 Nhibernate 声明不支持 Select (NotSupportedException)。代码:

var data = repository
        .Where(predicate);
        .OrderBy(columns)
        .Skip(amount)
        .Take(anotherAmount)
        .Select(projection);

这是一个错误还是我做错了什么?

【问题讨论】:

标签: c# linq nhibernate linq-to-nhibernate


【解决方案1】:

在我看来,这是 NH 中的一个错误。在 3.3.1.4000 版本中它可以正常工作。

【讨论】:

    【解决方案2】:

    当您调用 .Count() 您正在执行查询时,查询不再存在。您需要发出两个单独的查询来获取计数和列表。

    你可以用 Future 或 MultiQuery 做一些花哨的事情。

    编辑: http://groups.google.com/group/nhusers/browse_thread/thread/16c296414aedc09d

    这里的第二个帖子应该能够为您指明正确的方向。

    【讨论】:

    • Count() 不是这里的情况(如果我删除它,错误仍然存​​在),所以我将从代码示例中删除它。
    • 哦,你能显示整个查询吗,还有来自存储库的部分?
    • 存储库只是 LinqProvider - 取自 ISession.Query
    • 99% 确定 Linq 提供程序不支持投影,您需要使用 QueryOver。
    • 确实如此(我写了它 - 第二个代码示例工作正常),但感谢您的时间:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    相关资源
    最近更新 更多