2017-05-08 1 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

'VARのC = db.Expenses.Last()しようとはバランス;。 –

+0

あなたはその例外の原因となるコードを投稿していません。この例外は、EFがSQLへの変換方法を知らない問合せでメソッドを使用しようとすると発生します。例えば、これはあなたのエンティティ上のカスタムメソッドか 'String.IsNullOrWhiteSpace'のようなものです。しかし、ここのようなものはありません。 –

+0

@ChrisPrattコンパイラがvar c = a.Last();を指しています。例外が発生します。 – singha4086

答えて

0

SQLサーバーを使用している場合は、.Last()機能が動作しないことは間違いありません。

SQL Serverには(最後に選択する)ものはありません。そのため、Entityの基本はデータベースSQLサーバー言語に変換できません。これはあなたがする必要があります:

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

または何か似て、あなたがしたいです。

潜在的なNULL値を恐れている場合は、クエリを回してFirst() ...またはFirstOrDefault()を使用する方法を考えてみてください。

独自のソリューション:

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

あなたが提供した情報は本当に便利です。これはありがとうございました。私はいくつかの変更を加えなければなりませんでしたが、今は動作します。 – singha4086

+0

@ singha4086あなたが見つけた答えに応じてあなたの質問を修正すべきではありません...問題を含んでいる質問を誰かが理解できないようにしましょう。最初から問題があった...答えにあなたの行を含めます –

関連する問題