C# MVC | Linq更新查询|帮助!

C# MVC | Linq更新查询|帮助!,c#,asp.net-mvc,linq,controller,C#,Asp.net Mvc,Linq,Controller,我正在对继承的C#MVC应用程序进行修改 我有一个数据库,为了简单起见,我将只关注用于此linq查询的两个表 项目 ItemID Int PK 项目名称 维修选择(是或否) 修理ID Int FK 修理 维修ID Int PK 维修类别 提交日期 维修日期 好的,ItemID几乎就是标识符,显示修复细节的视图如下(代码片段): 这也很好,GET Edit视图显示正确的详细信息。我遇到的问题是更新修复表的linq查询。我今天尝试了很多方法,结果我的头都炸了(你可能已经猜到了,Linq是新来的)。我

我正在对继承的C#MVC应用程序进行修改

我有一个数据库,为了简单起见,我将只关注用于此linq查询的两个表

项目
ItemID Int PK
项目名称
维修选择(是或否)
修理ID Int FK

修理
维修ID Int PK
维修类别
提交日期
维修日期

好的,ItemID几乎就是标识符,显示修复细节的视图如下(代码片段):

这也很好,GET Edit视图显示正确的详细信息。我遇到的问题是更新修复表的linq查询。我今天尝试了很多方法,结果我的头都炸了(你可能已经猜到了,Linq是新来的)。我最近的一次尝试就在这里(我知道这是远远不够的,所以放轻松;-):

对于上述尝试,我得到一个序列不包含任何错误元素


任何帮助或指点都将不胜感激。谢谢大家。

看起来,对于Items表中的repairID,Repair表中的相应行缺失

使用以下查询检查数据:

SELECT RepairID FROM Items
EXCEPT
SELECT RepairID FROM Repair
这将在维修表中列出所有缺失的维修ID

如果需要更正案例数据,或者需要使用FirstOrDefault并检查返回值的可空性,即:

Repair existingData = ctn.Repair.FirstOrDefault(a => a.RepairId == item.RepairID && item.ItemID == itemId);

    if( existingData!= null)
    {
       existingData.SentForConversion = DateTime.Parse(formValues["SentForConversion"]);
       ctn.SaveChanges();
    }

我自己解决了这个问题。我只是换了一种方法。现在单击“编辑操作”链接时,我将带出维修ID而不是itemID,直接编辑维修条目。

谢谢您的回复。我刚刚更新了我的问题。我应该提到,在项目表中,我有一个“RepairSelection”列,该列为是或否。创建初始维修条目时,该列将更新为“是”。我根据这个条件过滤我的项目列表,所以数据肯定在那里。我希望这能更清楚地说明这种情况:)如果数据确实存在,那么接下来要检查的是发布的值,即分配给编辑操作的项参数的值是什么。你检查过了吗?是的,我已经调试过代码了。它正确地拾取了发布的值,但是在我的Linq查询中出现了null异常。existingData为null,因此我认为这是我编写查询的方式存在问题的原因。您认为如何?错误“Sequence Contains No Elements”(序列不包含元素)肯定是因为筛选器“a=>a.RepairId==item.RepairId&&item.ItemID==ItemID”没有返回任何行。我可以确保应用于过滤器的值产生0行.Hmmm。明天早上我得重新审视一下。我还尝试了SQL查询以在修复表中显示丢失的RepairID,但有0行,因此我被难住了。
 [HttpPost]
        public ActionResult Edit(Int64 itemId, Repair repair, Item item, FormCollection formValues)
        {
            if (formValues["cancelButton"] != null)
            {
                return RedirectToAction("View", new { ItemID = itemId });
            }

            ModelContainer ctn = new ModelContainer();

            Repair existingData = ctn.Repair.First(a => a.RepairId == item.RepairID && item.ItemID == itemId);

            existingData.SentForConversion = DateTime.Parse(formValues["SentForConversion"]);

            ctn.SaveChanges();

            return RedirectToAction("View", new { ItemID = itemId });
        }
SELECT RepairID FROM Items
EXCEPT
SELECT RepairID FROM Repair
Repair existingData = ctn.Repair.FirstOrDefault(a => a.RepairId == item.RepairID && item.ItemID == itemId);

    if( existingData!= null)
    {
       existingData.SentForConversion = DateTime.Parse(formValues["SentForConversion"]);
       ctn.SaveChanges();
    }