Многочисленные условия MVC3 в предложении where - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть следующее в моем контроллере

var workshop = registerDB.Workshops.Single(w => w.WorkshopID == id);
ViewBag.Enrollments = registerDB.Carts.Where(x => x.Username.Equals(User.Identity.Name));

и это на мой взгляд

@{ 
    //var carts = Model.Carts.Where(x => x.Username.Equals(User.Identity.Name));
     var carts =  ViewBag.Enrollments;
     var timeSlot = Model.TimeSlot;
    }

   @{
foreach (var item in carts)

{
    if (item != null)
    {
    if (timeSlot == item.Workshop.TimeSlot)
    {
        <h3>@timeSlot</h3>
    }
    }
     else
    {
        <h3>Does not Exist</h3>
    }

}
}

каждый раз ViewBag.Enrollments = registerDB.Carts.Where(x => x.Username.Equals(User.Identity.Name)); не возвращает результатов, появляется сообщение об ошибке System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first. и эта строка подсвечивается

if (timeSlot == item.Workshop.TimeSlot)

Ответы [ 3 ]

0 голосов
/ 21 сентября 2011

Вы проверяете это item != null, но не это item.Workshop != null, прежде чем пытаться его использовать.Может показаться, что это, возможно, ошибка, но почему она вызывает InvalidOperationException, а не NullReferenceException Я не знаю.

Попробуйте:

if (item != null && item.Workshop != null)
{
    if (timeSlot == item.Workshop.TimeSlot)
    {
        <h3>@timeSlot</h3>
    }
}
0 голосов
/ 21 сентября 2011

Не могли бы вы поставить один вызов в вашей модели:

workshops workshop = registerDB.Workshops.Single(w => w.WorkshopID == id);

А затем в вашем контроллере установите ViewBag:

try
{
ViewBag.Enrollments = workshop.Carts.Where(x => x.Username.Equals(User.Identity.Name));
}
catch
{
ViewBag.Enrollments = "There are no results";
}
0 голосов
/ 21 сентября 2011

Попробуйте вызвать .ToList() в контроллере, чтобы охотно получить результаты:

ViewBag.Enrollments = registerDB
    .Carts
    .Where(x => x.Username.Equals(User.Identity.Name))
    .ToList();
...