2011-09-21 175 views
0

我有我的控制器MVC3在where子句

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) 

回答

0

尝试调用.ToList()在控制器中预先抓取结果:

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

我如何检查ViewBag.Enrollments在用户没有做出任何选择的情况下? –

0

您检查item != null但不是item.Workshop != null尝试使用它之前。这似乎也许是错误,但为什么它提高InvalidOperationException,而不是NullReferenceException我不知道。

尝试:

if (item != null && item.Workshop != null) 
{ 
    if (timeSlot == item.Workshop.TimeSlot) 
    { 
     <h3>@timeSlot</h3> 
    } 
} 
+0

我试过了,但仍然有相同的错误 –

+0

@EdgarOchieng' - 不确定。 – ChrisF

0

你能不能把单一的呼叫模型:

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"; 
}