我正在处理的项目存在问题。相当新的C#和ASP.Net。
我正在尝试从文本字段中获取一个条目,并将其与我数据库中的最后一个条目进行比较。对于我的商业规则,阅读不得高于 Previous Years 阅读。我将从不同的机器上读取多个读数。
meterReading是我的MeterReading类的实例
这是我目前所拥有的:
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";
}
不知道我做了什么愚蠢的事。提前致谢
答案 0 :(得分:1)
您目前正在检查数据库中的任何读数是否小于当前读数;这显然是不对的,因为你可以存储200, 5000, 12005
的读数并对9000
进行测试。有2个小于9000的读数,因此您的代码将允许您在最后插入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将使用 time 进行比较,这是一种更好的方法,因为错误和仪表替换意味着读数不是必然单调。然后你会做类似的事情:
var lastRow = db.MeterReading.OrderByDescending(p => p.ReadingDate).FirstOrDefault();
if(lastRow == null || lastRow.Reading < newReading) {
// fine
} else {
// danger
}
请注意,您当前的代码仅支持一个客户和计量表。您可能还需要按这些过滤表。