2017-05-08 82 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你不应该根据你找到的答案来修改你的问题......让问题包含问题或者没有人会理解从一开始什么是问题......我将包括你的问题在我的答案中 –