Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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# StackOverflowException-查询结果集太大?_C#_Generic List_Stack Overflow_Addrange - Fatal编程技术网

C# StackOverflowException-查询结果集太大?

C# StackOverflowException-查询结果集太大?,c#,generic-list,stack-overflow,addrange,C#,Generic List,Stack Overflow,Addrange,我下面的查询检查了2000多个类别categoriesToCheck,并在这些类别中查找文章。我想它太大了,无法添加到通用列表中 我从下面的listInitialResult.AddRange(queryableInitialResult.ToList())下面的这一行中得到一个错误 即: 发生“System.StackOverflowException”类型的未处理异常 我希望任何人都能提出这样做的好方法 if (categoriesToCheck != null && cat

我下面的查询检查了2000多个类别
categoriesToCheck
,并在这些类别中查找文章。我想它太大了,无法添加到通用列表中

我从下面的
listInitialResult.AddRange(queryableInitialResult.ToList())下面的这一行中得到一个错误

即:

发生“System.StackOverflowException”类型的未处理异常

我希望任何人都能提出这样做的好方法

if (categoriesToCheck != null && categoriesToCheck.Count() > 0)
{
    var searchPredicate = PredicateBuilder.False<T>();

    foreach (ID category in categoriesToCheck)
    {
        var categoryToCompare = category.ToString().Replace("{", "").Replace("}", "");
        searchPredicate = searchPredicate.Or(i => i.Tags.Contains(categoryToCompare));
    }

    queryableInitialResult = queryable.Where(searchPredicate);

    listInitialResult.AddRange(queryableInitialResult.ToList());
}
if(categoriesToCheck!=null&&categoriesToCheck.Count()>0)
{
var searchPredicate=PredicateBuilder.False();
foreach(分类检查中的ID类别)
{
var categoryToCompare=category.ToString().Replace(“{”,“”)。Replace(“}”,“”);
searchPredicate=searchPredicate.Or(i=>i.Tags.Contains(categoryToCompare));
}
queryableInitialResult=queryable.Where(searchPredicate);
listInitialResult.AddRange(queryableInitialResult.ToList());
}

我可能怀疑添加范围与此无关。当您调用
ToList
并将其分配给一个变量,然后对该变量调用
AddRange
时,它是否有效?如果不是,这两行中哪一行失败了?这可能是您构建搜索谓词的方式。调用堆栈太大时会导致StackOverflowException。它通常是由递归调用(例如,一个方法调用本身)引起的。AddRange不可能是导致问题的原因。更有可能是收费者引起了问题。查询是使用谓词生成的,但查询和谓词是在调用ToList()时执行的。我认为谓词或初始查询中有一些递归调用。谢谢大家的建议。我尝试使用另一组“categories”(大约400个categories)来构建谓词,它没有在相同的代码中抛出任何错误。我会再次检查给我错误的“类别”串。Wiktor是对的!错误实际上发生在“ToList”调用中。那么,有什么建议可以正确地将iqueryable转换为列表吗?