无法强制转换类型为';的对象;WhereListIterator `1[Web.Model.Appointment

本文关键字:WhereListIterator 对象 Appointment Model Web 转换 类型 | 更新日期: 2023-09-27 18:27:16

这是我的控制器的代码片段

[HttpPost]
public ActionResult Cancel(string id,FormCollection collection)
{
   //This is how I would like to declare appt but I cannot seem to correctly pass id into this method
   //var appt = Application.Session.GetObjectFromOid<Appointment>(new ObjectId(id));
   //I am trying to do it this way instead but I get an error
   var appt = (Appointment)Application.Appointments.Where(a=>a.Id.Equals(collection["Id"]));
   .....
}

这是我得到的错误:无法将类型为"WhereListIterator `1[Web.Model.Appointment]"的对象强制转换为类型为"Web.Model.Appointment"。

这是我的观点:

<input type="button" value="Save" onclick="updateCancel(); return false;" /><button>Save</button>

这是我的功能

 function updateCancel() {
    $('#cancel').ajaxSubmit({
    });
    }

那么为什么我会出现这个错误呢?或者有没有一种方法可以将Model.Data.Id传递到我的函数中,这样我就可以使用Id了?

无法强制转换类型为';的对象;WhereListIterator `1[Web.Model.Appointment

Where子句返回迭代器。请选择要使用的内容。也就是说,如果你只期望一个结果,你可以使用FirstOrDefault。您也可以使用索引,如[1]

var appt = (Appointment)Application.Appointments.Where
     (a=>a.Id.Equals(collection["Id"]))
     .FirstOrDefault();

请注意,当找不到项目时,FirstOrDefault会返回null,因此请务必检查结果值。

附言:你可能不需要你的演员阵容。如果没有(Appointment,从标题中的错误来看,这应该会起作用,因为列表中的项目属于Appointment类型。

这就是我最终使用的内容,它起到了作用。

var appt = Application.Session.GetObjectFromOid<Appointment>(new ObjectId(id));

使用LINQ运算符时需要记住的一件事是,它们返回一个可以分配给IEnumerable的对象。

  • 如果您期望的是单个元素,那么您将需要附加另一个LINQ运算符。Single和SingleOrDefault都返回一个结果。当有超过1场比赛时,这些会抛出异常。

  • First和FirstOrDefault LINQ操作符也返回一个元素,只是在有多个匹配的情况下抛出异常,它们只返回找到的第一个元素。

在任何一种情况下,如果未找到匹配项,"OrDefault"运算符将返回null,但其他两个运算符将抛出异常。

相关文章:
  • 没有找到相关文章