Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
C# Linq到Sql类别子类别计数性能_C#_Linq_Linq To Sql_Database Performance - Fatal编程技术网

C# Linq到Sql类别子类别计数性能

C# Linq到Sql类别子类别计数性能,c#,linq,linq-to-sql,database-performance,C#,Linq,Linq To Sql,Database Performance,产品表:ID名称 类别表:ID ParentCategoryID名称 ProductCategories表:ID CatID ProdID 和。。CatID外键和ProdID外键中的ProductCategories 多个SQL查询而不是单个查询。如何查询? List-NameIDCountList=LINQ public class NameIDCount { public int ID {get;set;} public string Name { get;set;}

产品表:ID名称

类别表:ID ParentCategoryID名称

ProductCategories表:ID CatID ProdID

和。。CatID外键和ProdID外键中的ProductCategories

多个SQL查询而不是单个查询。如何查询?
List-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; }
    }
公共类NameIDCount
{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共整数计数{get;set;}
}
公共类NameIDCountList
{
公共名称idcount_类别{get;set;}
公共列表_子类别{get;set;}
}
我的方法:

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;
            }
<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>
public List getCategories(int-CatID)
{
List CategoryModel=新列表();
列出MainCats=(从data.Categories.Where中的k开始)(p=>p.ParentCategoryID==CatID&&p.ID!=0&&p.isActive)。选择(p=>newnameandid{Name=p.Name,ID=p.ID})。ToList()
加入英国data.ProductCategories
关于k.ID等于uk.catID
加入我们的产品
在英国,ProdID等于u.ID
按k分组为grp
orderby grp.Key.AD
选择新名称idcount
{
Name=grp.Key.Name,
ID=grp.Key.ID,
_COUNT=grp.COUNT()
}).ToList();
foreach(主猫中的变量猫)
{
NameIDCountList cm=
新名称IDCountList()
{
__类别=猫,
_子类别=(从data.Categories.Where(p=>p.ParentCategoryID==cat.ID&&p.isActive)中的k开始)。选择(p=>newnameandid{Name=p.Name,ID=p.ID})。ToList()
加入英国data.ProductCategories
关于k.ID等于uk.catID
加入我们的产品
在英国,ProdID等于u.ID
按k分组为grp
orderby grp.Key.AD
选择新名称idcount
{
Name=grp.Key.Name,
ID=grp.Key.ID,
_COUNT=grp.COUNT()
}).ToList();
};
添加类别模型(cm);
}
返回类别模型;
}
结果:

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;
            }
<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>

user1439338,您可以尝试将问题格式化一点,使其更具吸引力。执行递归查询的唯一方法是在SQL本身中使用公共表表达式。没有人会在linq中为您提供解决方案。这在StackOverflow已经被尝试和询问过很多次了。此外,请不要重新发布问题。重新发布