【问题标题】:How to sort by a filter using two different queries?如何使用两个不同的查询按过滤器排序?
【发布时间】:2014-01-26 16:07:18
【问题描述】:

所以我正在建立一个论坛并尝试按最后回复日期对主题进行排序。因此,当有人访问主页并单击按“回复”排序时,它将按最近的回复对线程进行排序。不过,我在使用切换命令时遇到了麻烦。我尝试使用:

var threads = from s in db.Forum
              where s.ReplyId==0
              select s;
var Replies = (from s in db.Forum
                         where s.ReplyId != 0
                         select s).OrderByDescending(i => i.DateCreated);
switch (sortOrder)
{
    default:
         threads = threads.OrderByDescending(s => Replies.Where(i => i.ReplyId == threads.Where(t=> t.Id==i.ReplyId).FirstOrDefault().Id).FirstOrDefault().DateCreated);
         break;
}

我收到一个运行时错误,提示“检测到循环”。

线程查询会抓取所有回复 ID 为 0 的帖子,或者换句话说,每个帖子都被视为一个线程。 Replies 会抓取所有不等于 0 的帖子,即所有回复线程的帖子。

谁能告诉我另一种按最近回复对主题进行排序的方法?回复和线程都使用相同的模型,因此具有挑战性。

【问题讨论】:

  • 您的问题令人困惑。我已经阅读了 3 次,无法区分“按最后回复日期对线程进行排序”与“按最近回复对线程进行排序”之间的区别。也许如果你把任务换成不同的方式,你自己就会得到答案。
  • 所以我想根据他们的回复显示最近的线程。因此,如果回复了 thread1,我希望 thread1 位于列表顶部,因为它是最近活动的线程。是这样吗?
  • 你能从数据库中获取最近的回复列表,将它们加入线程并显示这些线程吗?
  • 好吧,我现在更困惑了。 threadreply 有什么区别?您可以发布您的模型及其关系吗?
  • 他们使用相同的模型。除了回复没有标题外,它们被认为是相同的东西。线程是实际线程的第一个帖子,回复是对该线程的回复。

标签: c# asp.net


【解决方案1】:

在 linq 查询中使用了 DISTINCT() 函数,但该函数仅用于表中的一个字段

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多