gpt4 book ai didi

c# - IEnumerable 与 IQueryable

转载 作者:太空宇宙 更新时间:2023-11-03 20:36:57 24 4
gpt4 key购买 nike

我有一个问题:

topics.OrderBy(x => x.Replies.Any() ? x.Replies.OrderBy(y => y.PostedDate).Last().PostedDate : x.PostedDate);

它按最后回复对主题集合进行排序,或者如果没有回复则按其自己的发布日期进行排序。它工作得很好并且做得很好。但是,它仅在主题类型为 IEnumerable<Topic> 时才有效.如果我尝试使其成为“IQueryable”,我会收到一条错误消息,指出扩展方法 Last() 未知或类似的问题。

有人知道为什么吗?由于某种原因得到 x.Replies.Last()在此查询中,当主题是 IQueryable 时抛出此异常。

我希望主题是可查询的,因为我首先从数据库中加载所有主题的主题,并按最后回复排序。然后我对分页主题执行 .Skip() 和 .Take()。但是,目前它正在将所有主题拉入内存,然后对内存中的集合执行 .Skip() 和 .Take()。这是 Not Acceptable ,因为添加到论坛的主题越多,加载网站所需的时间就越长,尤其是当数据库与网站不在同一台计算机上运行时。我需要数据库只返回分页行,而不是所有行。我希望分页发生在数据库级别。

有什么想法吗?

PS - 我使用 LINQ to Entities with Entity Framework 4.0

最佳答案

您是否尝试过 topics.OrderBy(x => x.Replies.Any() ? x.Replies.Max(y => y.PostedDate) : x.PostedDate);

关于c# - IEnumerable 与 IQueryable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4704288/

24 4 0