在ASP.NET MVC中,序列包含多个元素
我想使用单个子类别名称显示产品,但我发现序列包含多个元素错误 子类别名称传递值以显示产品控制器的操作,如下所示在ASP.NET MVC中,序列包含多个元素,asp.net,asp.net-mvc-4,asp.net-mvc-5,Asp.net,Asp.net Mvc 4,Asp.net Mvc 5,我想使用单个子类别名称显示产品,但我发现序列包含多个元素错误 子类别名称传递值以显示产品控制器的操作,如下所示 public ActionResult show(string subcategory) { if (subcategory == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
public ActionResult show(string subcategory)
{
if (subcategory == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var subcat = db.SubCategories.Include("Products").Single(s => s.SubCategoryName == subcategory);
if (subcat == null)
{
return HttpNotFound();
}
return View(subcat);
}
public class Category
{
public Category()
{
Products = new HashSet<Product>();
SubCategories = new HashSet<SubCategory>();
}
public int CategoryId { get; set; }
public string CategoryName { get; set; }
public virtual ICollection<SubCategory> SubCategories { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class SubCategory
{
public SubCategory()
{
Products = new HashSet<Product>();
}
public int SubCategoryId { get; set; }
public string SubCategoryName { get; set; }
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public int CategoryId { get; set; }
public int SubCategoryId { get; set; }
public virtual Category Category { get; set; }
public virtual SubCategory SubCategory { get; set; }
}
|Computer=>HP
=>Lenovo
|Computer=>HP
=>Lenovo
|Mobile =>Samsung
=>Apple
|Mobile =>Samsung
=>Apple
我有这样的菜单视图
@model IEnumerable<mTest.Models.Category>
<div>
<ul>
@foreach (var category in Model)
{
<li class="active has-sub"><a href="#"><span>@category.CategoryName</span></a>
<ul>
@foreach (var subcategory in category.SubCategories)
{
<li class="has-sub"><a href="/Products/show?subcategory=@subcategory.SubCategoryName"><span>@subcategory.SubCategoryName</span></a></li>
}
</ul>
</li>
}
</ul>
</div>
如何解决这个问题
var subcat=db.子类别。包括(“产品”)。单个(s=>
s、 子类别名称==子类别)
对于给定的子类别
,如果在子类别
中找到多个元素,则由于单个
用法,上述语句将抛出您提到的错误(序列包含多个元素)。因此,不要使用Single
,而是使用FirstOrDefault
。因此,您的代码应该如下所示
var subcat = db.SubCategories.Include("Products").FirstOrDefault(s => s.SubCategoryName == subcategory);
你为什么用单曲,应该是单曲吧?使用
Single
,如果在可枚举项中找到多个元素,则会抛出您提到的异常。如果您只需要一个元素,那么使用FirstOrDefault
@ramilu我想显示来自不同类别的单个子类别项,因此我使用了Single。