Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC控制器:在保存之前使用LINQ检查表中是否存在重复值?_C#_Asp.net Mvc_Linq_Asp.net Mvc 5 - Fatal编程技术网

C# MVC控制器:在保存之前使用LINQ检查表中是否存在重复值?

C# MVC控制器:在保存之前使用LINQ检查表中是否存在重复值?,c#,asp.net-mvc,linq,asp.net-mvc-5,C#,Asp.net Mvc,Linq,Asp.net Mvc 5,我有以下Create()-POST控制器用于我的制造商实体: // POST: INV_Manufacturers/Create // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see http://go.microsoft.com/fwlink/?LinkId=317598. [HttpPost] [Va

我有以下
Create()-POST
控制器用于我的
制造商
实体:

// POST: INV_Manufacturers/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for 
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create([Bind(Include = "Id,manufacturer_description,created_date,created_by,modified_date,modified_by")] INV_Manufacturers iNV_Manufacturers)
{

    iNV_Manufacturers.created_date = DateTime.Now;
    iNV_Manufacturers.created_by = System.Environment.UserName;

    if (ModelState.IsValid == false && iNV_Manufacturers.Id == 0)
    {
        ModelState.Clear();
    }

    if (ModelState.IsValid)
    {
        db.INV_Manufacturers.Add(iNV_Manufacturers);
        await db.SaveChangesAsync();
        return RedirectToAction("Index");
    }

    return View(iNV_Manufacturers);
}
在我的控制器中使用
LINQ
的语法是什么?我可以在那里搜索
INV\u Manufacturers
表,并检查表中是否已经存在与我的
Create()
方法中即将保存的值相比具有相同
描述的
制造商

伪代码

if (manufacturer.description == ANY.manufacturer.description in Table)
{
    alert("This value already exists in table!");
} else {
    Save(new manufacturer);
}
当然,只要使用
.Any()
。它将根据是否找到实体返回布尔值。在第一次查找时,它将停止枚举,因此如果它存在,它将快速爆发。如果它不存在,它将检查整个表,并返回false(这就是为什么
添加
位于
!.Any()


谢谢特拉维斯!关于(当存在描述时)将此类消息发布回视图的任何提示?@AnalyticLunatic这取决于此代码所在的位置。有很多方法可以完成这项任务。您可以将其放置在ModelState字典中并使描述无效,强制用户更改它,您可以简单地声明存在错误,您可以将详细的错误消息作为视图模型的一部分发送回去,您可以使用ajax在提交之前先在视图中进行测试,然后以这种方式提供信息,您可以使用TempData放置一个指示错误的字符串,并在视图中查找TempData,可能还有更多选项。在你的应用程序范围内使用有意义的内容:)嗯。。。我在我的控制器里。您是否有将其放入
ModelState-dictionary
并使其描述无效的示例?这听起来是一个有趣的尝试途径。除了Travis回答服务器端检查之外,如果您还想进行客户端验证,还可以使用
[Remote]
属性。
if (manufacturer.description == ANY.manufacturer.description in Table)
{
    alert("This value already exists in table!");
} else {
    Save(new manufacturer);
}
if(!db.INV_Manufacturers.Any(m => m.manufacturer_description == iNV_Manufacturers.manufacturer_description))
{
    db.INV_Manufacturers.Add(iNV_Manufacturers);
}
else
{
    //logic for when that description exists
    //for example, to add to ModelState
    ModelState.AddModelError("manufacturer_description","Description Exists");
}