2017-05-08 199 views
1

我想從數據庫中獲取記錄的最後一個值。我正在使用實體框架。我正在嘗試獲取餘額的最後一個值,並扣除用戶輸入以獲得新餘額的金額。我是新手,試圖創建一個簡單的費用管理系統。返回列的最後一個值

我控制器

 public ActionResult Create([Bind(Include = "ExpenseId,ExpenseFor,DateTime,Amount,Balance,RowVersion")] Expense expense) 
    { 
     if (ModelState.IsValid) 

     { 
      var a = db.Expenses.Select(b => b.Balance); 
      var c = a.Last(); 
      expense.Balance = c - expense.Amount; 

      db.Expenses.Add(expense); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(expense); 
    } 
     return View(expense); 
    } 

我的模型看起來像這樣

public class Expense 
    { 
     public int ExpenseId { get; set; } 
     public string ExpenseFor { get; set; } 
     public DateTime DateTime { get; set; } 
     public Decimal? Amount { get; set; } 
     public Decimal? Balance { get; set; } 
     [Timestamp] 
     public byte[] RowVersion { get; set; } 
    } 

當我試圖創造新的紀錄,它說,該方法不能被翻譯成店表達。我真的很感激任何幫助。

+0

嘗試'變種C = db.Expenses.Last()餘額; –

+0

您尚未發佈任何會導致該異常的代碼。當您嘗試在EF不知道如何轉換爲SQL的查詢中使用方法時引發該異常。例如,這可能是您實體上的自定義方法,或者是'String.IsNullOrWhiteSpace'類似的東西。但是,這裏沒有這樣的東西。 –

+0

@ChrisPratt編譯器指向var c = a.Last();導致異常。 – singha4086

回答

0

如果您使用SQL服務器,難怪.Last()函數不起作用。

在SQL服務器中沒有(最後選擇)這樣的東西,所以實體basicaly無法將其轉換爲數據庫SQL服務器語言。這是你必須做的:

var v = db.Expenses.OrderByDescending(t => t.ColumnName).First(); 

或類似的東西,這取決於你想要什麼。

試着想想一種方法來打開查詢,並使用First() ...或FirstOrDefault()如果你害怕潛在的空值。

自己的解決方案:

var v = db.Expenses.OrderByDescending(t => t.ExpenseId).First(); 
+1

您提供的信息非常有用。謝謝你的工作。我不得不做出一些改變,但它現在起作用。 – singha4086

+0

@ singha4086你不應該根據你找到的答案來修改你的問題......讓問題包含問題或者沒有人會理解從一開始什麼是問題......我將包括你的問題在我的答案中 –

相關問題