如何获取最新的数据库条目并将其与文本字段进行比较

时间:2017-05-16 08:42:42

标签: c# asp.net

我正在处理的项目存在问题。相当新的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";
                        }

不知道我做了什么愚蠢的事。提前致谢

1 个答案:

答案 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
}

请注意,您当前的代码仅支持一个客户和计量表。您可能还需要按这些过滤表。