im Wesentlichen Ich habe das Problem, in dem ich eine Liste von Tausenden von und Klauseln habe, die alle mit oder Klauseln verbunden sind. Es würde ein bisschen wie: < /p>
aussehen
Code: Select all
(A AND B) OR (C AND D) OR ...
Ich habe versucht, Auswahl für jede und Klausel zu erstellen und mithilfe von concat mithilfe von Entity Framework miteinander zu kombinieren, aber ich erhalte eine Stapelüberlaufausnahme.
Ich habe das Gefühl, dass es einen besseren Weg geben sollte, den Code zu schreiben, aber ich bin mir nicht sicher, dass ich den Fehler und einen Beispielcode in einer Hoffnung eingeschlossen habe Zurück zum Schreiben von Inline SQL (geht gegen das Entity Framework Paradigm) < /p>
Der genaue Fehler lautet wie folgt: < /p>
Code: Select all
Stack overflow.
Repeat 798 times:
--------------------------------
at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.Visit[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.ObjectModel.ReadOnlyCollection`1, System.Func`2, StateType ByRef, State[] ByRef, Boolean)
at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.Visit(System.Collections.ObjectModel.ReadOnlyCollection`1, StateType ByRef, State[] ByRef, Boolean)
at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitMethodCall(System.Linq.Expressions.MethodCallExpression)
at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.Visit(System.Linq.Expressions.Expression)
--------------------------------
at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.Visit[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.ObjectModel.ReadOnlyCollection`1, System.Func`2, StateType ByRef, State[] ByRef, Boolean)
at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.Visit(System.Collections.ObjectModel.ReadOnlyCollection`1, StateType ByRef, State[] ByRef, Boolean)
< /code>
Bibliotheken: < /p>
[list]
[*]EFCore.BulkExtensions.PostgreSql
[*]
Code: Select all
Microsoft.EntityFrameworkCore.Design
[*]
Code: Select all
Npgsql.EntityFrameworkCore.PostgreSQL
[*]
Code: Select all
Npgsql.EntityFrameworkCore.PostgreSQL.Design
[/list]
Hier ist ein Beispiel, wie das Problem reproduziert wird:
Code: Select all
private class SimpleDbContext : DbContext
{
// Stores the values 0, 1, 2, ..., 100000
public virtual DbSet SequencePoints { get; set; }
}
private class SequencePoint
{
public int SequenceNumber { get; set; }
}
private void ConcatErrorTest()
{
SimpleDbContext simpleDbContext = new();
List selectRanges = new(); // 0, 10, 11, 20, 21, 21, etc...
for (int i = 0; i < 7500; i++)
{
int startRange = i * 10;
int endRange = startRange + (i % 5);
selectRanges.Add(new Tuple(startRange, endRange));
}
IQueryable queryable = null;
foreach (Tuple selectRange in selectRanges)
{
IQueryable whereQueryable = simpleDbContext.SequencePoints.AsQueryable().Where(point =>
(point.SequenceNumber >= selectRange.Item1) &&
(point.SequenceNumber sequenceNumber.SequenceNumber).ToList();
_logger.LogInformation("result = {result}", result);
}