По сути У меня есть проблема, когда у меня есть список из тысяч и положений, связанных с или . Это было бы немного похоже на: < /p>
Код: Выделить всё
(A AND B) OR (C AND D) OR ...
Предложения создаются из списка, поэтому количество положений и , которые объединяются с помощью или динамическими и могут быть от 0 до тысячи. < /p>
Я попытался создать выборы для каждого предложения и использования concat , чтобы объединить несколько выборов вместе, используя структуру Entity, но я получаю исключение переполнения стека.
Я чувствую, что должен быть лучший способ написать код, но я не уверен, поэтому я включил ошибку и какой -то пример кода в надежде, что кто -то знает, как это должно быть сделано, не возвращаясь Вернемся к написанию inline sql (идет против парадигмы структуры объекта) < /p>
Точная ошибка заключается в следующем: < /p>
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>
библиотеки: < /p>
[list]
[*]EFCore.BulkExtensions.PostgreSql
[*]
Код: Выделить всё
Microsoft.EntityFrameworkCore.Design
[*]
Код: Выделить всё
Npgsql.EntityFrameworkCore.PostgreSQL
[*]Npgsql.EntityFrameworkCore.PostgreSQL.Design version = "1.1.0"
[/list]
Вот пример, как воспроизвести проблему:
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);
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... any-concat