代码之家  ›  专栏  ›  技术社区  ›  Maverick Meerkat

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

  •  0
  • Maverick Meerkat  · 技术社区  · 9 年前

    在我的代码中,我允许用户按参数(扩展名)过滤。可以有很多不同的扩展(100+)。

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

    foreach (var i in FilteredExt)
    {
        backupEvents = backupEvents.Where(e => (e.Ext != i && e.Ext != "." + i));
    }
    

    语法分析器堆栈溢出 系统数据SQLite。SQLite3.Prepare(SQLiteConnection cnn,字符串 strSql、SQLiteStatement-previous、UInt32超时、String&STREMAIN) at系统。数据SQLite。SQLITE命令。BuildNextCommand()位于 系统数据SQLite。SQLiteDataReader。NextResult()位于 系统数据SQLite。SQLiteDataReader。。ctor(SQLiteCommand cmd, 命令行为) 系统数据SQLite。SQLITE命令。ExecuteReader(命令行为 行为) 系统数据实体基础设施拦截。内部调度程序 1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func 3操作,TInterceptionContext拦截context, 行动 3 executing, Action 3)于 系统数据实体基础设施拦截。DbCommandDispatcher。读卡器(DbCommand 命令,dbcommandinterceptoncontext interceptoncontext)位于 系统数据实体果心实体客户。内部的实体命令定义。执行建议(EntityCommand 实体命令、命令行为) ---内部异常堆栈跟踪结束---在系统。数据实体果心实体客户。内部的实体命令定义。执行建议(EntityCommand entityCommand,CommandBehavior)位于 系统数据实体果心物体。内部的ObjectQueryExecutionPlan。执行[TResultType](ObjectContext) 上下文,ObjectParameterCollection parameterValues) 1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) at System.Data.Entity.Core.Objects.ObjectQuery 1.<&燃气轮机;c__DisplayClass7。b__5() at系统。数据实体果心物体。ObjectQuery 1.GetResults(Nullable 1. forMergeOption)在 1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() at System.Data.Entity.Internal.LazyEnumerator 1.MoveNext()位于 系统收藏。通用的列表 1..ctor(IEnumerable 1)在 系统林克。可枚举。ToList[TSource](IEnumerable'1源)

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

    1 回复  |  直到 9 年前
        1
  •  1
  •   tym32167    9 年前

    我不确定它会不会起作用,但你能试着用那种方式进行过滤吗:

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

    无需任何费用。