Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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 to SQL:查找儿童最多三个级别_C#_Linq To Sql - Fatal编程技术网

C#Linq to SQL:查找儿童最多三个级别

C#Linq to SQL:查找儿童最多三个级别,c#,linq-to-sql,C#,Linq To Sql,我有一家商店,其类别存储在数据库中,如下所示: 类别使用ParentCategoryId相互嵌套,根父ID为0 我想知道如何检索最多3级(不超过3级)的类别列表? 注意:对我来说很重要的一点是,如果可能的话,可以通过输入参数调整最大级别的数量。每个级别的循环如何 public void GetCategories(int level) { var categories = db.Categories.Where(c => c.ParentCategoryId == 0).ToLis

我有一家商店,其类别存储在数据库中,如下所示:

类别使用ParentCategoryId相互嵌套,根父ID为0

我想知道如何检索最多3级(不超过3级)的类别列表?

注意:对我来说很重要的一点是,如果可能的话,可以通过输入参数调整最大级别的数量。

每个级别的循环如何

public void GetCategories(int level) {
   var categories = db.Categories.Where(c => c.ParentCategoryId == 0).ToList();
   var parents = categories.Select(c => c.Id);
   for (var ii = 0; ii < level; ii++) {
      var newCategories = db.Categories.Where(c => parents.Contains(c.ParentCategoryId).ToList();  
      parents = newCategories.Select(c => c.Id);
      categories = categories.Concat(newCategories);
}

   var result = categories;
}
public void GetCategories(int级别){
var categories=db.categories.Where(c=>c.ParentCategoryId==0.ToList();
var parents=categories.Select(c=>c.Id);
对于(var ii=0;iiparents.Contains(c.ParentCategoryId.ToList();
parents=newCategories.Select(c=>c.Id);
categories=categories.Concat(新类别);
}
var结果=类别;
}

我认为您需要所有级别,而不仅仅是最后一个级别。

这是一个很好的答案,但是没有快捷方式或SQL查询可以避免多次运行查询以获得最终列表?您为什么需要这样做?过早的“优化”,您无法确定它是否会更快/更高效。。。