2016-08-12 41 views
0

我刚刚开始自学C#和ASP - 我目前正在开发一个简单的WebApp来维护一个列表并确保条目是最新的。无法获得在实体框架中的排序工作

我已经使用实体框架的数据库第一种方法,以获得它的所有链接,并加载&编辑数据没有问题。

我试图添加排序&搜索;我已经成功完成了这些工作,但我不得不退回一些工作,现在排序/搜索功能无法正常工作。我想我知道问题在哪里,但不知道如何解决!

昨天花了几个小时试图解决它没有运气,所以想我会在这里尝试我的运气。

模型文件结构: Models> Loggers.edmx> Loggers.tt> Logger_Name.cs。

public partial class Logger_Name 
{ 
    public int Serial { get; set; } 
    public string Friendly_Name { get; set; } 
    public string Site { get; set; } 
    public string tSiteCode { get; set; } 
    public string aSiteCode { get; set; } 
} 

picture of edmx diagram with names

控制器

public class LoggersController : Controller 
    { 
     private REDHHP_DEVEntities db = new REDHHP_DEVEntities(); 

    // GET: Loggers 
    public ActionResult Index(string sortOrder, string searchString) 
    { 

     ViewBag.NameSortParm = sortOrder == "friendly_name_asc" ? "friendly_name_desc" : "friendly_name_asc"; 
     ViewBag.SiteSortParm = sortOrder == "site_asc" ? "site_desc" : "site_asc"; 
     ViewBag.CodeSortParm = sortOrder == "site_code_asc" ? "site_code_desc" : "site_code_asc"; 
     ViewBag.SerialSortParm = sortOrder == "serial_asc" ? "serial_desc" : "serial_asc"; 

     var loggerz = from s in db.Logger_Entity 
         select s; 

     if (!String.IsNullOrEmpty(searchString)) 
     { 
      loggerz = loggerz.Where(s => s.Friendly_Name.Contains(searchString) 
            || s.Site.Contains(searchString) 
            || s.tSiteCode.Contains(searchString)); 
     } 

     switch (sortOrder) 
     { 
      case "site_desc": 
       loggerz = loggerz.OrderByDescending(s => s.Site); 
       break; 
      case "friendly_name_desc": 
       loggerz = loggerz.OrderByDescending(s => s.Friendly_Name); 
       break; 
      case "fite_code_desc": 
       loggerz = loggerz.OrderByDescending(s => s.tSiteCode); 
       break; 
      case "site_asc": 
       loggerz = loggerz.OrderBy(s => s.Site); 
       break; 
      case "friendly_name_asc": 
       loggerz = loggerz.OrderBy(s => s.Friendly_Name); 
       break; 
      case "site_code_asc": 
       loggerz = loggerz.OrderBy(s => s.tSiteCode); 
       break; 
      case "serial_desc": 
       loggerz = loggerz.OrderByDescending(s => s.Serial); 
       break; 
      case "serial_asc": 
       loggerz = loggerz.OrderBy(s => s.Serial); 
       break; 
      default: 
       loggerz = loggerz.OrderBy(s => s.Site); 
       break; 
     } 

     return View(db.Logger_Entity.ToList()); 
    } 

我有一种强烈的预感,这个问题是与该位:

var loggerz = from s in db.Logger_Entity 
         select s; 

任何帮助,不胜感激!

+0

偏离主题,但看看[System.Linq.Dynamic(https://开头www.nuget.org/packages/System.Linq.Dynamic/) –

回答

1

这是一个愚蠢的错误。您传回原始数据库列表,而无需过滤或排序:

return View(db.Logger_Entity.ToList()); 

应该是:

return View(loggerz.ToList()); 
+0

不错的地方。 OP中的代码目前使所有其他逻辑变得冗余。很好,很容易修复:) –

+0

Eugh!真是一个愚蠢的错误:| - 谢谢你! :)欣赏它。 –