Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC查询帮助_Asp.net Mvc_Linq_Pagination - Fatal编程技术网

Asp.net mvc ASP.NET MVC查询帮助

Asp.net mvc ASP.NET MVC查询帮助,asp.net-mvc,linq,pagination,Asp.net Mvc,Linq,Pagination,我的应用程序上有以下索引方法,显示了一系列文章: public ActionResult Index(String query) { var ArticleQuery = from m in _db.ArticleSet select m; if (!string.IsNullOrEmpty(query)) { ArticleQuery = ArticleQuery.Where(m => m.headline.Contains(query));

我的应用程序上有以下索引方法,显示了一系列文章:

public ActionResult Index(String query)
{
    var ArticleQuery = from m in _db.ArticleSet select m;

    if (!string.IsNullOrEmpty(query))
    {
        ArticleQuery = ArticleQuery.Where(m => m.headline.Contains(query));
    }

    //ArticleQuery = ArticleQuery.OrderBy(m.posted descending);

    return View(ArticleQuery.ToList());
}
它还兼作搜索机制,通过抓取查询字符串(如果存在)

问题1.)OrderBy不起作用,我需要对其进行什么更改才能使其按发布日期降序显示结果

问题2.)我将添加一个非常简单的分页,因此每页只显示4个结果。我该怎么做才是最好的?谢谢

编辑:除了问题2之外,我正在寻找一个简单的助手类解决方案,以便在当前代码中实现上述分页。这个看起来很好(http://weblogs.asp.net/andrewrea/archive/2008/07/01/asp-net-mvc-quot-pager-quot-html-helper.aspx),但如何在应用程序中实现它。谢谢

  • ArticleQuery.OrderByDescending(m =>m.posted)
  • 请查看包含 分页辅助程序,可以是 ,或与MvcContrib的网格辅助程序结合使用
  • 编辑:使用MvcContrib并没有变得容易多少

    1/创建可查询的源

    public ActionResult Index(String query, int? page)
    {
    var pagesize = 4; // can also be a parameter and/or a configuration setting
    var ArticleQuery = from m in _db.ArticleSet select m;
    
    if (!string.IsNullOrEmpty(query))
    {
        ArticleQuery = ArticleQuery.Where(m => m.headline.Contains(query));
    }
    
    ArticleQuery = ArticleQuery.OrderByDescending(m => m.posted);
    
    return View(ArticleQuery.AsPagination(page, pageSize));
    }
    
    2/在您看来,您可以使用MvcContrib pager helper方法,如下所示:

     <%= Html.Pager((IPagination)Model)%>
    
    
    
    这将输出一个不错的寻呼机控件

    下面是另一种解释,它也使用MvcContrib网格控件(不是必需的):

  • ArticleQuery.OrderByDescending(m =>m.posted)
  • 请查看包含 分页辅助程序,可以是 ,或与MvcContrib的网格辅助程序结合使用
  • 编辑:使用MvcContrib并没有变得容易多少

    1/创建可查询的源

    public ActionResult Index(String query, int? page)
    {
    var pagesize = 4; // can also be a parameter and/or a configuration setting
    var ArticleQuery = from m in _db.ArticleSet select m;
    
    if (!string.IsNullOrEmpty(query))
    {
        ArticleQuery = ArticleQuery.Where(m => m.headline.Contains(query));
    }
    
    ArticleQuery = ArticleQuery.OrderByDescending(m => m.posted);
    
    return View(ArticleQuery.AsPagination(page, pageSize));
    }
    
    2/在您看来,您可以使用MvcContrib pager helper方法,如下所示:

     <%= Html.Pager((IPagination)Model)%>
    
    
    
    这将输出一个不错的寻呼机控件


    下面是另一种解释,它也使用MvcContrib网格控件(不是必需的):

    您需要按如下方式重新构造(假设第0页是第一页):


    有很多分页解决方案,我不推荐任何一种。上面的代码演示了一个后端实现,它将显示页面,您仍然需要显示页面,等等。

    您需要按如下方式重新构造页面(假设第0页是第一页):

    有很多分页解决方案,我不推荐任何一种。上面的代码演示了一个后端实现,它将分页,您仍然需要显示分页器,等等。

    Cameron

    我希望通过一个下载链接的例子能对你有所帮助。我为网站上的其他人制作了这个小应用程序,以帮助解决类似的问题。基本上,它展示了如何创建IPagedList接口

    i、 e

    然后创建一个具体的类,并通过querystring参数(包括OrderBy等)填充它

    大概是这样的:

    public class Test 
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int SerialNumber { get; set; }
    }
    public class TestCollection : IPagedList
    {
        public IList<Test> TestList { get; set; }
    
        // purely for test purposes
        public int PageIndex{ get; set; }
        public int PageSize { get; set; }
        public int TotalPages{ get; set; }
    
        public TestCollection()
        {
            TestList = new List<Test>();
        }
    }
    
    公共类测试
    {
    公共字符串名{get;set;}
    公共字符串LastName{get;set;}
    公共整数序列号{get;set;}
    }
    公共类TestCollection:IPagedList
    {
    公共IList测试列表{get;set;}
    //纯粹用于测试目的
    公共int页索引{get;set;}
    公共int PageSize{get;set;}
    公共整型TotalPages{get;set;}
    公共测试集合()
    {
    TestList=新列表();
    }
    }
    
    下面是它的外观:

    你可以在这里找到它:

    祝你玩得开心。

    卡梅隆

    我希望通过一个下载链接的例子能对你有所帮助。我为网站上的其他人制作了这个小应用程序,以帮助解决类似的问题。基本上,它展示了如何创建IPagedList接口

    i、 e

    然后创建一个具体的类,并通过querystring参数(包括OrderBy等)填充它

    大概是这样的:

    public class Test 
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int SerialNumber { get; set; }
    }
    public class TestCollection : IPagedList
    {
        public IList<Test> TestList { get; set; }
    
        // purely for test purposes
        public int PageIndex{ get; set; }
        public int PageSize { get; set; }
        public int TotalPages{ get; set; }
    
        public TestCollection()
        {
            TestList = new List<Test>();
        }
    }
    
    公共类测试
    {
    公共字符串名{get;set;}
    公共字符串LastName{get;set;}
    公共整数序列号{get;set;}
    }
    公共类TestCollection:IPagedList
    {
    公共IList测试列表{get;set;}
    //纯粹用于测试目的
    公共int页索引{get;set;}
    公共int PageSize{get;set;}
    公共整型TotalPages{get;set;}
    公共测试集合()
    {
    TestList=新列表();
    }
    }
    
    下面是它的外观:

    你可以在这里找到它:

    祝您玩得开心。

    问题1:OrderBy(和OrderByDescending,我认为这是您想要的)方法要求您传递一个函数来指定如何执行排序。大多数人选择使用lambda表达式来执行此操作:

    ArticleQuery = ArticleQuery.OrderByDescending(m => m.posted);
    
    有关更多详细信息,请参阅

    问题2:您需要更改操作方法以接受页码和页面大小参数,然后从视图中传递这些参数。在LINQ查询中,您将使用我喜欢称之为“跳过+获取”的方法:

    问题#1:OrderBy(和OrderByDescending,我认为这是您想要的)方法要求您传递一个函数来指定如何执行排序。大多数人选择使用lambda表达式来执行此操作:

    ArticleQuery = ArticleQuery.OrderByDescending(m => m.posted);
    
    有关更多详细信息,请参阅

    问题2:您需要更改操作方法以接受页码和页面大小参数,然后从视图中传递这些参数。在LINQ查询中,您将使用我喜欢称之为“跳过+获取”的方法:


    您可以将orderby添加到原始查询中,可以使用.Take([number])完成前4项


    您可以将orderby添加到原始查询中,可以使用.Take([number])完成前4项

  • (和第2.2部分)

    返回视图(ArticleQuery.OrderByDecenting(a=>a.posted).Take(4.ToList())

  • 改变你的行动(这只是让你开始,不是最好的答案)

  • a

  • (和第2.2部分)

    返回视图(ArticleQuery.OrderByDecenting(a=>a.posted).Take(4.ToList())

  • 改变你的行动(这只是让你开始,不是最好的答案)

  • a


    我从最高层回答这个问题
    public ActionResult Index(string query, int page)
    {
        var ArticleQuery = from m in _db.ArticleSet select m;
        if (!string.IsNullOrEmpty(query))
        {
            ArticleQuery = ArticleQuery.Where(m => m.headline.Contains(query));
        }
        return View(ArticleQuery.OrderByDecending(a => a.posted).Skip(page * 4).Take(4).ToList());
    }
    
    int PageSize = 4;
    public ActionResult Index(String query, int page)
    {
        IOrderedEnumerable ArticleQuery = (from m in _db.ArticleSet select m);
    
        if (!string.IsNullOrEmpty(query))
        {
            ArticleQuery = ArticleQuery.Where(m => m.headline.Contains(query));
        }
    
        ArticleQuery = ArticleQuery.Skip(PageSize * (page - 1)).Take(PageSize).OrderBy(m.posted descending);
    
        return View(ArticleQuery.ToList());
    }