0

私はEFを学んでいるので、これが他の場所で回答されている場合は謝罪します。これに対する解決策が見つかりませんでした。条件をサポートしていないため、インクルードを使用できないため、2 つの追跡クエリを使用しています。したがって、私のコードは次のとおりです。

    List<int> CategoryIDs = _categoryIDs.Split(',').Select(t => int.Parse(t)).ToList();

私のモデル:

 public class Genre
{

    public int GenreID { get; set; }
    public string Name  { get; set; }
    public string iconURL{ get; set; }
    public string Description { get; set; }
    public int DisplaySequence { get; set; }
    public IList<Category> Categories { get; set; 

}



   public class Category
   {


    public int CategoryId { get; set; }
    public int GenreID { get; set; }
    public string CategoryName { get; set; }
    public virtual Genre Genre { get; set; }
   }


     public class SubCategory
      {


    public int SubCategoryID { get; set; }     
    public int CategoryID { get; set; }
    public string SubCategoryName { get; set; }  
    public virtual Category Category { get; set; } 
}

それから私は私のビューモデルを持っています:

public class HomeIndexData
{

    public IEnumerable<Genre> Genres { get; set; }
    public IEnumerable<Category> Categories { get; set; }
    public IEnumerable<SubCategory> SubCategories { get; set; }         

}

次に、ビューモデルをインデックスに戻そうとしています:

     public ActionResult Index()
     {

     var genres = db.Genres.ToList().OrderBy(g => g.DisplaySequence);
     var categories = db.Categories.Include(i => i.SubCategories)
                     .Where(i => CategoryIDs.Contains(i.CategoryId));
            foreach (var category in categories)
            {

            };

           HomeIndexData viewModel = new HomeIndexData
            {
                Genres = genres                         

            };
            return View(viewModel);      

        }

結果を返しますが、SubCategories もフィルタリングしたかったのです。.Include(i => i.SubCategories) の代わりに WHERE 条件を配置するにはどうすればよいですか。

匿名型を返したくないことに注意してください。そのため、私は 2 つの追跡されたクエリです。

前もって感謝します。

4

1 に答える 1

0

そうですね、あなたがここで何をしたいのか分かっていると思います:

// so filter out categories
var categories = db.Categories.Where(c => CategoryIDs.Contains(c.CategoryID)); 

// so filter out subcategories - I'm not sure what kind of filtering you want on subcategories
var subcategories = db.Subcategories.Where(s => CategoryIDs.Contains(s.SubCategoryID)); 
// so alternatively just do this: var subcategories = db.Subcategories.Where(s => s.DoYourFilteringForSubcategories);

foreach (var subcategory in subcategories)
    var cat = categories.SingleOrDefault(c => c.CategoryID == subcategory.CategoryID)
    if (cat != null)
    {
        cat.Subcategories.Add(subcategory);
    }
    else
    {
        // very good question? what are you going to do with subcategories that
        //match your criteria, but its category does not meet category filter
    }

モデルに次を追加する必要があります。

   public class Category
   {
    public int CategoryId { get; set; }
    public int GenreID { get; set; }
    public string CategoryName { get; set; }
    public virtual Genre Genre { get; set; }
    **public virutal List<Subcategory> Subcategories{ get; set; }**
   }

したがって、フィルタに一致するカテゴリのみが表示され、フィルタに一致するサブカテゴリのみが含まれます。すべて厳密に型指定され、追跡されます。

于 2013-04-06T11:09:01.757 に答える