簡體   English   中英

不包含“包含”的定義

[英]Does not contain definition for 'Contains'

它顯示代碼的錯誤,例如“不包含ID的定義”

[HttpPost]
public ActionResult show(List<int> ids)
    {
        if (ids != null)
        {
            int[] brands = ids.ToArray();
            var brandId = _db.Brands.Where(p => brands.Contains(p.ID));
            var srtItems = _db.Products.Where(p => p.CategoryID == brandId.ID);

            return PartialView("_pView", srtItems);
        }
    }

對於以下代碼,錯誤是“不包含包含的定義”

[HttpPost]
        public ActionResult show(List<int> ids)
        {
            if (ids != null)
            {
                int[] brands = ids.ToArray();
                var brandId = _db.Brands.Where(p => brands.Contains(p.ID));

                var sortItemss = _db.Products.Where(p => brandId.Contains(p.CategoryID));
                return PartialView("_pView", srtItems);
            }

請指導我

這就是var因為隱藏了真實的數據類型而成為萬惡之源的地方。 刪除var,您會立即發現問題:

int[] brands = ids.ToArray();
IQueryable<Brand> brandId = _db.Brands.Where(p => brands.Contains(p.ID));
IQueryable<Product> srtItems = _db.Products.Where(p => p.CategoryID == brandId.ID);

brandId是一個序列(在實現時),並且不是單個對象,因此不包含ID的定義。

為了解決這個問題,您可以:

IQueryable<int> brandIds = _db.Brands.Where(p=> brands.Contains(p.ID)).Select(b=> b.ID);
IQueryable<Product> srtItems = _db.Products.Where(p=> brandIds.Contains( p.CategoryID));

獲取檢索到的記錄的ID,並通過這些ID進行匹配。

作為建議 ,除非實型是多余的,否則不要使用var (這意味着它會在語句的其他部分中顯示)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM