Linq To Sql Category Sub Category Count Performans

家住魔仙堡 提交于 2019-12-11 15:55:21

问题


Product Table : ID Name ...

Category Table : ID ParentCategoryID Name

ProductCategories Table : ID CatID ProdID

and.. ProductCategories in CatID foreign key and ProdID foreign key

multiple SQL queries instead of a single query. How to query? List<NameIDCountList> NameIDCountList = LINQ ?

public class NameIDCount
{
    public int ID {get;set;}
    public string Name { get;set;}
    public int Count { get;set;}
}

public class NameIDCountList
    {
        public NameIDCount _Category { get; set; }
        public List<NameIDCount> _SubCategories { get; set; }
    }

My Method:

public List<NameIDCountList> getCategories(int CatID)
            {


            List<NameIDCountList> CategoryModel = new List<NameIDCountList>();

            List<NameIDCount> MainCats = (from k in data.Categories.Where(p => p.ParentCategoryID == CatID && p.ID != 0 && p.isActive).Select(p => new NameAndID{ Name = p.Name, ID = p.ID}).ToList()
                                                                   join uk in data.ProductCategoriries
                                                                   on k.ID equals uk.catID
                                                                   join u in Product
                                                                   on uk.ProdID equals u.ID
                                                                   group u by k into grp
                                                                   orderby grp.Key.AD
                                                                   select new NameIDCount
                                                                   {
                                                                       Name = grp.Key.Name,
                                                                       ID = grp.Key.ID,
                                                                       _COUNT = grp.Count()
                                                                   }).ToList();


            foreach (var cat in MainCats)
                        {
                            NameIDCountList cm =
                                new NameIDCountList()
                                {
                                    __Category = cat,
                                    _SubCategories = (from k in data.Categories.Where(p => p.ParentCategoryID == cat.ID && p.isActive).Select(p => new NameAndID{ Name = p.Name, ID =p.ID}).ToList()
                                                                   join uk in data.ProductCategoriries
                                                                   on k.ID equals uk.catID
                                                                   join u in Product
                                                                   on uk.ProdID equals u.ID
                                                                   group u by k into grp
                                                                   orderby grp.Key.AD
                                                                   select new NameIDCount
                                                                   {
                                                                       Name = grp.Key.Name,
                                                                       ID = grp.Key.ID,
                                                                       _COUNT = grp.Count()
                                                                   }).ToList();
                                };
                            CategoryModel.Add(cm);
                        }
                return CategoryModel;
            }

Result:

<a href="/category/id=1">PC [23]</a>
    <a href="/category/id=4">NoteBook [2]</a>
    <a href="/category/id=5">Desktop [21]</a>
<a href="/category/id=2">Monitor [6]</a>
     <a href="/category/id=8">LED Monitor [4]</a>
     <a href="/category/id=9">LCD Monitor [2]</a>

来源:https://stackoverflow.com/questions/16509527/linq-to-sql-category-sub-category-count-performans

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!