Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NET MVC中,序列包含多个元素_Asp.net_Asp.net Mvc 4_Asp.net Mvc 5 - Fatal编程技术网

在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。