Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 实体中断,谓词太多(解析器堆栈溢出)_C#_Entity Framework_Linq_Sqlite - Fatal编程技术网

C# 实体中断,谓词太多(解析器堆栈溢出)

C# 实体中断,谓词太多(解析器堆栈溢出),c#,entity-framework,linq,sqlite,C#,Entity Framework,Linq,Sqlite,在我的代码中,我允许用户通过参数扩展进行过滤。100+可以有很多不同的扩展 到目前为止,我一直在使用: foreach (var i in FilteredExt) { backupEvents = backupEvents.Where(e => (e.Ext != i && e.Ext != "." + i)); } 但是我注意到,如果filteredex包含少量的条目~30,那么这种方法是有效的——如果它包含更多的条目,那么查询将中断,视图将保持为空 错误:

在我的代码中,我允许用户通过参数扩展进行过滤。100+可以有很多不同的扩展

到目前为止,我一直在使用:

foreach (var i in FilteredExt)
{
    backupEvents = backupEvents.Where(e => (e.Ext != i && e.Ext != "." + i));
}
但是我注意到,如果filteredex包含少量的条目~30,那么这种方法是有效的——如果它包含更多的条目,那么查询将中断,视图将保持为空

错误:

位于的分析器堆栈溢出 System.Data.SQLite.SQLite3.PrepareSQLiteConnection cnn,字符串 strSql、SQLiteStatement-previous、UInt32 timeoutMS、String和stremain 位于System.Data.SQLite.SQLiteCommand.BuildNextCommand处 System.Data.SQLite.SQLiteDataReader.NextResult位于 System.Data.SQLite.SQLiteDataReader..ctorSQLiteCommand cmd, 命令行为表现在 System.Data.SQLite.SQLiteCommand.ExecuteReaderCommandBehavior 行为 System.Data.Entity.Infrastructure.InternalDispatcher1.Dispatch[TTarget,TinterAcceptionContext,TResult]TTarget 目标,Func3操作,TInterceptionContext拦截Context, Action3正在执行,Action3在 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.ReaderDbCommand 命令,dbcommandinterceptoncontext interceptoncontext位于 System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommandsEntityCommand entityCommand,CommandBehavior -System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoromRecommandSentityCommand处的内部异常堆栈跟踪结束 entityCommand,命令行为位于 System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType]ObjectContext 上下文,ObjectParameterCollection参数值位于 System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T]Func1 func,IDbExecutionStrategy executionStrategy,布尔值 startLocalTransaction,布尔ReleaseConnectionOnUnsuccess位于 System.Data.Entity.Core.Objects.ObjectQuery1.c\u DisplayClass7.b\u 5 位于System.Data.Entity.Core.Objects.ObjectQuery1.GetResultsNullable1 forMergeOption在 System.Data.Entity.Core.Objects.ObjectQuery1.b__0 位于System.Data.Entity.Internal.LazyEnumerator 1.MoveNext at System.Collections.Generic.List1..ctorIEnumerable1集合位于 System.Linq.Enumerable.ToList[TSource]IEnumerable`1源


有没有办法处理/避免这种情况?

我不确定它是否有效,但你能尝试用这种方式进行过滤吗:

var FilteredExtWithDot = FilteredExt.Select(x=>"." + x).ToArray();
backupEvents = 
          backupEvents
          .Where(e => !FilteredExt.Contains(e.Ext) && !FilteredExtWithDot.Contains(e.Ext));

而且不需要foreach。

有点怀疑这会转换成SQL。@RandRandRandom它对SQL Server有效,但我不确定更新的SQL LiteThx,我不知道你可以将一个本地列表传递给它,并且它可以正确地进行转换。有什么原因导致FiltereIndex没有存储在数据库中吗?@RandRandom主要是因为我从未想过这一点。您建议添加一个新表,并在用户每次取消/选择扩展时更新它?我想这不是一个问题-但如何在没有FilteredExt的情况下获取事件?var backupevents=context.events.SqlQueryselect*from events ev,其中ev.ext不在select fe.ext from filteredex fe;-我不知道如何将not in翻译成linq,但你可以使用它。这是一个很好的建议。当我有时间的时候,我会努力实现这一点。我想知道在过滤的情况下,它通常与在DB中保存过滤列表一起工作,还是通常保存在运行时环境中?