2014-10-16 48 views
0

我已經能夠用我的第一個MVC項目做了很多很酷的事情。但是,我不是一個訓練有素的程序員,所以我有時會被困在簡單的事情上。我使用實體框架以及預定義的數據庫表列表獲得了一切工作,但是我的應用程序需要在生成它們時自動使用新表,所以我決定使用一個調用函數而不是實體。列出數據庫項目的頁面正在工作,但我在顯示特定項目的詳細信息的頁面上遇到問題。我不知道如何在ID傳遞,然後顯示該ID信息...如何db.Find(id)沒有實體?

實體方式

public ActionResult Summary(string id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 

     ixoc_G0000102_RunSummary ixoc_G0000102_RunSummary = db.ixoc_G0000102_RunSummary.Find(id); 
     if (ixoc_G0000102_RunSummary == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(ixoc_G0000102_RunSummary); 
    } 

的新途徑

public ActionResult Summary(string id) 
    { 
     if (Session["LoggedUser"] == null) 
     { 
      return RedirectToAction("Login", "Account"); 
     } 
     else 
     { 
      UserData userd = (UserData)Session["LoggedUser"]; 
      CustomerData customerd = (CustomerData)Session["LoggedCustomer"]; 
      List<NodeInfo> nodes = siteContext.siServerConnect.GetNodes(customerd.ixguid, customerd.AccessLevel); 
      nodes = nodes.OrderBy(x => x.name).ToList(); 
      string[] online = siteContext.siServerConnect.GetLiveNodesFromServer(); 

      List<string> nodeNames = new List<string>(); 
      DateTime endTime = DateTime.Now; 
      TimeSpan periodToQuery = new TimeSpan(7, 0, 0, 0); 
      DateTime startTime = endTime - periodToQuery; 

      foreach (NodeInfo n in nodes) 
      { 
       nodeNames.Add(n.name); 
      } 

      List<AverageNodeValues> runs = siteContext.siServerConnect.GetRuns(nodeNames, startTime, endTime); 
      runs = runs.Find(id); 
      DataWrapper wrapper = new DataWrapper(nodes, online, runs); 
      return View(wrapper); 
     } 
    } 

也有一些是錯誤的Find(id)部分,非常感謝任何幫助!

回答

0

如果你是在談論這一部分:

List<AverageNodeValues> runs = siteContext.siServerConnect.GetRuns(nodeNames, startTime, endTime); 
runs = runs.Find(id); 

我猜你正在努力尋找其Id特定對象。如果你只是試圖限制第一個查詢,你需要做一些類似的事情(不知道對象屬性是什麼)run = runs.Where(x => x.Id == id),但是你可以這樣做,內嵌爲List<AverageNodeValues> runs = siteContext.siServerConnect.GetRuns(nodeNames, startTime, endTime).Where(.....)

如果你只是想獲得一個單一的實體,然後使用SingleOrDefault(x => x.Id == id)FirstOrDefault(x => x.Id == id)

1

望着用於List<>.Find的文檔,它需要一個謂語,以例如找到一個項目

runs = runs.Find(item => return item.id == id);

或者你可以使用LINQ擴展方法如SingleOrDefault()

runs = runs.SingleOrDefault(item => return item.id == id);

將返回如果項目不被發現匹配的id,或NULL的單個項目。總體而言,我建議使用LINQ方法,因爲它們將是更常用的方法來查找集合中的項目,例如List<T>

試試看看它是否有效。