Это фрагмент кода моего контроллера
[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?
3 ответа
Это то, что я в итоге использовал, и это сработало.
var appt = Application.Session.GetObjectFromOid<Appointment>(new ObjectId(id));
Предложение Where возвращает итератор. Выберите то, что вы хотите использовать вместо этого. То есть, если вы ожидаете только один результат, вы можете использовать FirstOrDefault
. Вы также можете использовать индекс, например [1]
.
var appt = (Appointment)Application.Appointments.Where
(a=>a.Id.Equals(collection["Id"]))
.FirstOrDefault();
Обратите внимание, что FirstOrDefault
возвращает null
, когда элемент не найден, поэтому обязательно проверьте значение результата.
PS: вам, наверное, там не нужен гипс. Без (Appointment
, из-за ошибки в заголовке, это должно работать, потому что элементы в списке относятся к типу Appointment
.
При работе с операторами LINQ, которые в любом случае возвращают ноль или более элементов, следует помнить одну вещь: они возвращают объект, который может быть назначен IEnumerable.
Если вы ожидаете один элемент, вам либо потребуется добавить еще один оператор LINQ. И SingleOrDefault, и SingleOrDefault возвращают один результат. Они вызывают исключения, когда есть БОЛЕЕ 1 совпадение.
Операторы LINQ First и FirstOrDefault также возвращают один элемент, просто помимо генерации исключения, если совпадений больше 1, они просто возвращают первый найденный элемент.
В любом случае, если совпадения не найдено, операторы OrDefault возвращают значение null, но два других генерируют исключение.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.