gpt4 book ai didi

c# - 为什么 Nhibernate.Linq 会抛出异常 "The method Compareto is not implemented"?

转载 作者:太空宇宙 更新时间:2023-11-03 18:44:34 25 4
gpt4 key购买 nike

我已经为这个问题苦苦挣扎了很长时间,但我无法让它正常工作。我想要做的是获取日期早于指定条目的条目。为了便于您理解,我将向您展示这段代码:

        var post = _session.Linq<PostModel>()
.Where(o => o.PostId == id)
.FirstOrDefault();

return _session.Linq<PostModel>()
.Where(o => DateTime.Compare(post.PostDate, o.PostDate) >= 0)
.ToList();

这行不通!它会抛出一个异常说:

The method Compareto is not implemented.

我已经尝试在我的 PostModel 中实现“IComparer”,但这似乎不是这里的问题。虽然,如果我首先将所有条目转换为列表,然后比较它们,这将起作用,如下所示:

        return _session.Linq<PostModel>().ToList()
.Where(o => DateTime.Compare(post.PostDate, o.PostDate) >= 0)
.ToList()

但据我了解,在任何情况下将所有条目转换为列表将导致 NHibernate 选择所有条目。如果我们谈论的是少量条目,这可能不是问题,但从长远来看,这会浪费一些时间。

有没有人有什么想法?

TIA

最佳答案

问题是 NHibernate linq 提供程序需要将对 DateTime.Compare 的调用转换为 SQL,以便它可以在服务器上执行。正如错误所述,这尚未实现,但您可以将查询更改为:

_session.Linq<PostModel>()
.Where(o => post.PostDate >= o.PostDate)
.ToList();

这可能会被实现。

关于c# - 为什么 Nhibernate.Linq 会抛出异常 "The method Compareto is not implemented"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5605508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com