Получение переполнения стека со слишком большим количеством CONCATC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Получение переполнения стека со слишком большим количеством CONCAT

Сообщение Anonymous »

Когда я создаю запрос на dbset со слишком большим количеством concat или где положения, я получаю ошибку переполнения стека.
По сути У меня есть проблема, когда у меня есть список из тысяч и положений, связанных с или . Это было бы немного похоже на: < /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
version = "8.1.2"
[*]

Код: Выделить всё

Microsoft.EntityFrameworkCore.Design
version = "9.0.0"
[*]

Код: Выделить всё

Npgsql.EntityFrameworkCore.PostgreSQL
version = "9.0.2"
[*]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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Получение переполнения стека со слишком большим количеством CONCAT
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Получение переполнения стека со слишком большим количеством CONCAT
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • C# Entity Framework бросает переполнение стека с помощью слишком большого количества CONCAT
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Стек между слишком большим количеством данных и базой данных для вставки
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Как удалить столбцы pandas со слишком большим количеством значений NA [дубликат]
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»