2017-05-16 10 views
1

私が取り組んでいるプロジェクトに問題が継続中です。 C#とASP.Netのかなり新しいものです。最新のデータベースエントリを取得して、それをテキストフィールドと比較する方法

私は現在、テキストフィールドからエントリを取得し、それをデータベースの最後のエントリと比較しようとしています。私のビジネスルールでは、読書は前年度の読書より高くてはいけません。私は別のマシンから複数の読みを持っています。私は愚かか何かをやっている場合

var checkMeterReading = (from p in db.MeterReading 
            where (p.Reading < meterReading.Reading) 
            select p); 


    if (checkMeterReading.Count() > 0) 
         { 

          if (!String.IsNullOrEmpty()) 
          { 
           //saves into DB 
          } 
         } 

         else 
         { 
          TempData["Error"] = "Meter Reading must be higher than last actual"; 
         } 

は知ってはいけない:

meterReadingは、これは私が持っているもので、現在、私のクラスのMeterReading

のインスタンスです。事前にお礼します

+0

あなたの質問は正確ですか? –

答えて

1

が現在の読み値より小さいかどうかを確認していますか?それは明らかに正しくはありません。読み取り値が200, 5000, 12005で、9000とテストされている可能性があります。 9000未満の2つの読み取り値があるため、コードで最後に9000を挿入することができます。 読み取りが高くなっていないこと::

var higherExists = db.MeterReading.Any(p => p.Reading > newReading); 
if(higherExists) { 
    // danger! 
} else { 
    // do the insert... as long as you're dealing with race conditions :) 
} 

注より良いアプローチは、IMOのエラー以来、時間を使用して比較するのだろうと何をチェックしたいことはすべて読みは少ない、または同等であるということです計器の交換は、測定値がであることを意味し、必ずしも単調ではありません。次に、あなたは次のようなことをします:

var lastRow = db.MeterReading.OrderByDescending(p => p.ReadingDate).FirstOrDefault(); 
if(lastRow == null || lastRow.Reading < newReading) { 
    // fine 
} else { 
    // danger 
} 

あなたの現在のコードは1つの顧客とメーターしかサポートしていません。おそらく、それらのテーブルでフィルタリングする必要もあります。

関連する問題