条件语句始终为True

时间:2016-04-11 17:35:43

标签: c# if-statement asp.net-mvc-5 conditional

以下 if 语句只应在绑定的对象的属性与数据库中已有的记录匹配时执行:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,AID,Date,PostPreID")] OL oLevel)
{

        if (ModelState.IsValid)
        {
            if(oLevel.PostPreID == 2)
            {
                if (db.OL.Any(x => DbFunctions.TruncateTime(x.Date) == DbFunctions.TruncateTime(oLevel.Date) && x.PostPreID == oLevel.PostPreID))
                    {
                        ModelState.AddModelError("PostPreID", "There is already a record for this Date!");
                        return View(oLevel);
                    }
                else
                {
                    db.OL.Add(oLevel);
                    db.SaveChanges();
                    return RedirectToAction("Index", new { id = oLevel.AID });
                }
            }

            if(oLevel.PostPreID == 3)
            {
                if (db.OL.Any(x => DbFunctions.TruncateTime(x.Date) == DbFunctions.TruncateTime(oLevel.Date) && x.PostPreID == oLevel.PostPreID))
                {
                    ModelState.AddModelError("PostPreID", "There is already a record for this Date!");
                    return View(oLevel);
                }
                else
                {
                    db.OL.Add(oLevel);
                    db.SaveChanges();
                    return RedirectToAction("Index", new { id = oLevel.AID });
                }
            }

            db.OL.Add(oLevel);
            db.SaveChanges();
            return RedirectToAction("Index", new { id = oLevel.AID });
        }
        return View(oLevel);
    }

基本上,如果数据库中已存在PostPreID为该特定日期为2的记录,则用户不应该能够在特定日期添加PostPreID等于2的记录。当PostPreID等于3时,逻辑相同。

我已调试,并在PostPreID中为dt输入了2和3日期,我知道数据库不包含这些记录,但由于某种原因,嵌套的if语句包含 .Any < / em>方法总是解析为true。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这个问题似乎与DbFunctions.TruncateTime(x.Date)有关。因此TruncateTime会删除时间并只比较两个日期,例如:

'4/11/2016 12:48 PM' == '4/11/2016 6:37 AM'

将评估为真。这意味着无论时间如何,只要日期和ID相同 - .Any将始终为真。