返回列的最后一个值

时间:2017-05-08 18:32:20

标签: asp.net-mvc entity-framework

我试图从数据库中获取记录的最后一个值。我正在使用实体框架。我正在尝试获取余额的最后一个值并扣除用户输入的金额以获得新余额。我是新手,并试图创建一个简单的费用管理系统。

我的控制器

      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; }
    }

当我尝试创建新记录时,它表示Method无法转换为商店表达式。我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

如果您使用SQL服务器,那么毫无疑问.Last()功能将不起作用。

在SQL Server中没有(select last)这样的东西,因此Entity basicaly无法将其转换为数据库SQL服务器语言。这就是你要做的事情:

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

或类似的东西,取决于你想要的东西。

如果您害怕潜在的空值,请尝试考虑一种转换查询并使用First() ...或FirstOrDefault()的方法。

您自己的解决方案:

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