C# Linq到Sql类别子类别计数性能
产品表:ID名称 类别表:ID ParentCategoryID名称 ProductCategories表:ID CatID ProdID 和。。CatID外键和ProdID外键中的ProductCategories 多个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;}
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已经被尝试和询问过很多次了。此外,请不要重新发布问题。重新发布