2016-08-12 42 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!真是一個愚蠢的錯誤:| - 謝謝你! :)欣賞它。 –