【问题标题】:Can I list multiple orderby's?我可以列出多个 orderby 的吗?
【发布时间】:2018-06-23 19:53:35
【问题描述】:

早上好。 我已经实现了添加回复的功能。 我在实施过程中有不明白的问题。 使用排序时使用 orderby。 我可以使用多个 orderbyes 吗? 目前我只按时间顺序排序。 因此,即使您回复,它也会上升到页面顶部。 您应该按列排序,回复将出现在单词下方。 如何使用多个 orderby? You should come to 1-1 under 1. And 1-2 should come under 1-1.

[HttpGet]
    public ActionResult Notice(int? page)
    {
        var article = db.Articles.ToList().Where(c => c.Category == "공지사항").OrderByDescending(o => o.ModifyDate);
        var pageNumber = page ?? 1;                             
        var OnePageOfArticle = article.ToPagedList(pageNumber, 10);  
        ViewBag.OnePageOfList = OnePageOfArticle;
        ViewBag.TotalCount = db.Articles.Where(c => c.Category == "공지사항").Count();
        ViewBag.PageNumber = pageNumber;

        return View();
    }

查看:

<table class="footable table table-stripped toggle-arrow-tiny" data-page-size="3" id="table">
                        <thead>
                            <tr>
                                <th data-toggle="true" data-sort-ignore="true" width="10%" class="text-center">번호</th>
                                <th width="55%" class="text-center">제목</th>
                                <th data-hide="phone,tablet" class="text-center" width="auto">글쓴이</th>
                                <th data-hide="phone" class="text-center" width="auto">작성일</th>
                            </tr>
                        </thead>
                        <tbody>
                            @{
                                int i = 0;
                                int idx = 0;
                            }
                            @foreach (var item in ViewBag.OnePageOfList)
                            {
                                idx = ViewBag.TotalCount - ((ViewBag.PageNumber - 1) * 10) - i;
                                String str = "공지사항";

                                if (@item.Category.Equals(str))
                                {
                                    var indent = 20 * item.Indent + "px";
                                    <tr>
                                        <td>@idx.ToString()</td>
                                        <!--부모글-->
                                        @if (item.Indent == 0)
                                        {
                                            <td class="text-left"><a href="/Board/Detail?aidx=@item.ArticleIDX">@item.Title</a></td>
                                        }
                                        <!--답글-->
                                        @if (item.Indent != 0)
                                        {
                                            <td class="text-left" style="padding-left:@indent;"><a href="/Board/Detail?aidx=@item.ArticleIDX">└Re:@item.Title</a></td>
                                        }
                                        <td>
                                            @if (item.ModifyMemberID == item.Members.ID)
                                             {
                                                @item.Members.Name;
                                             }
                                        </td>
                                        <td>@Convert.ToDateTime(item.ModifyDate).ToString("yyyy.MM.dd")</td>
                                    </tr>
                                }
                                i++;
                            }
                        </tbody>
                        <tfoot>
                            <tr>
                                <td colspan="6"><ul class="pagination pull-right"></ul></td>
                            </tr>
                        </tfoot>
                    </table>

控制器:

[HttpPost]
    public ActionResult ReplyCreate(Articles articles)
    {
        {
            if (TempData["aidx"] != null && TempData["family"] != null)
            {
                int aidx = Convert.ToInt32(TempData["aidx"]);
                var parent = db.Articles.Where(a => a.ArticleIDX == aidx).FirstOrDefault();

                var article = new Articles
                {
                    Family = parent.Family,
                    Parent = parent.ArticleIDX,
                    Depth = parent.Depth + 1,
                    Indent = parent.Indent + 1,
                    Title = articles.Title,
                    Contents = articles.Contents,
                    Category = parent.Category,
                    ModifyMemberID = User.Identity.Name,
                    ModifyDate = DateTime.Now
                };

                db.Articles.Add(article);
                db.SaveChanges();

                return RedirectToAction("Notice");
            }
            return View();
        }
    }

【问题讨论】:

  • 请看ThenBy
  • 谢谢。当我第一次使用thenby时,我以为我有不同的方式。我想我以前应该犯过错误。

标签: asp.net entity-framework linq asp.net-mvc-5


【解决方案1】:

你可以使用ThenBy,你的代码也有一些错误;

[HttpGet]
public ActionResult Notice(int? page)
{
    var articles = db.Articles.Where(c => c.Category == "공지사항")
    .OrderByDescending(o => o.ModifyDate)
    .ThenBy(x => x.FieldName).ToList();
    var pageNumber = page ?? 1;              
    ViewBag.TotalCount = articles.Count;    
    var OnePageOfArticle = articles.ToPagedList(pageNumber, 10);  
    ViewBag.OnePageOfList = OnePageOfArticle;
    ViewBag.PageNumber = pageNumber;
    return View();
}

我还有一些笔记;

  • 从数据库中提取数据后不要应用Where 子句。直接以IQueryable形式应用where条件,从而在数据库中。

  • 注意名称方便,将 article 更改为 articles

  • 您无需再次访问数据库即可计算列表计数。您已经有了列表,只需将其计算为内存。 (Count)

  • 不需要使用ViewBag,而是使用Model。这不是 MVC 的正确方法。

【讨论】:

  • 谢谢!你很善良。
  • 完全没问题。
【解决方案2】:

要按多列添加排序,试试这个。

var article = db.Articles.ToList().Where(c => c.Category == "공지사항").OrderByDescending(o => o.ModifyDate)

尝试添加到 .OrderByDescending.ThenBy(o =&gt; o.FieldName)
.ThenByDescending(o =&gt; o.Fieldname)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-21
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多