Невозможно выполнить поиск в List<KeyValuePair>, сохраненном как строка json в БД, используя выражение в базовой структуC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно выполнить поиск в List<KeyValuePair>, сохраненном как строка json в БД, используя выражение в базовой структу

Сообщение Anonymous »

У меня есть таблица в базе данных, в которой есть строковый столбец с нулевым значением, ее имя — «ExtraInfo». Ее значение — json списка, например, вот так
{"StaffCode":"123"
поскольку мы добавили нумерацию страниц для поиска, мы отправляем фильтр в виде выражения. Вот мой код

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

public async Task GetDealsWithPagination(int organiztionId,string staffCode, int index, int size)
{
var filter = PredicateBuilder.New();
if (organiztionId != default(int))
{
filter.And(x => x.Organization == organiztionId);
}
if (!string.IsNullOrEmpty(staffCode))
{
filter.And(x => x.ExtraInfo != null &&
Newtonsoft.Json.JsonConvert.DeserializeObject(x.ExtraInfo).ToList().FirstOrDefault(x => x.Key == "StaffCode").Value == staffCode);
}
Func orderBy = q => q.OrderByDescending(e => e.CreationDate);5

return (await GetPaged(filter, orderBy, index, size, null, 0, "RequestHistory", "UserCart", "UserCart.BusinessLine")).ToList();
}
public async virtual Task GetPaged(Expression filter = null,
Func orderBy = null,
int pageIndex = 0,
int pageSize = 0,
string sortColumnName = "",
int sortDirection = 0,
params string[] includes)
{
IQueryable query = dbSet;
if (includes != null)
{
foreach (string include in includes)
query = query.Include(include);
}
if (filter != null)
query = query.Where(filter);

if (orderBy != null)
query = orderBy(query);
if (pageIndex != default(int) && pageSize != default(int))
{
if (pageSize != -1) // Check if pageIndex is not -1 to retrive all data
{
query = query.Skip((pageIndex - 1) * pageSize).Take(pageSize);
}
}
return await query.ToListAsync();
}
и эта проблема возникла после того, как я поискал код персонала.
Я пытался обновить свое выражение для обработки пары нулевых ключей и значений Staffcode, но получил ошибку сборки
:{
"StackTrace": " в Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.g__CheckTranslated|8_0(ShapedQueryExpression переведено, c__DisplayClass8_0& )\r\n в Microsoft.EntityFrameworkCore .Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression MethodCallExpression)\r\n в Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression MethodCallExpression)\r\n в Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVi sitor.VisitMethodCall(MethodCallExpression методCallExpression)\r\n в Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression MethodCallExpression)\r\n в Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression MethodCallExpression)\r\n в Microsoft.EntityFrameworkCore.Query.Query. ableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression методCallExpression) \r\n в Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression MethodCallExpression)\r\n в Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query)\r\n в Microsoft.EntityFrameworkCore.Storage. Database.CompileQuery[TResult](запрос-выражение, логическое асинхронное выражение)\r\n в Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](база данных IDatabase, запрос-выражение, модель IModel, логическое асинхронное выражение)\r\n в Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.c__DisplayClass12_0

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

1.b__0()\r\n at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQueryCore[TFunc](Object cacheKey, Func
1 компилятор)\r\n в Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteAsync[TResult](запрос выражения, CancellationToken cancelToken)\r\n в Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.ExecuteAsync[ TResult](выражение выражения, CancellationToken cancelToken)\r\n в Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable

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

1.GetAsyncEnumerator(CancellationToken cancellationToken)\r\n at System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable
1.GetAsyncEnumerator()\r\n в Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable

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

1 source, CancellationToken cancellationToken)\r\n at Ifin.Persistence.Repositories.BaseRepository
1.GetPaged(Expression

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

1 filter, Func
2 orderBy, Int32 pageIndex, Int32 pageSize, String sortColumnName, Int32 sortDirection, String[] включает) в D:\CoreProject\Ifin.Repositories\Repositories\BaseRepository.cs:line 146\r\n в Ifin.Persistence .Repositories.CusFinRequestRepository.GetByAdvancedSearchPaginated(String customerId, String mobile, Nullable

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

1 BankId, String status, Int32 organiztionId, Nullable
1 startDate, значение NULL

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

1 endDate, Nullable
1 maxAmount, допускающее значение NULL

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

1 minAmount, String customerCIF, String staffCode, Int32 index, Int32 size) in D:\\CoreProject\\Ifin.Repositories\\Repositories\\CusFinRequestRepository.cs:line 91\r\n at Ifin.Business.Service.InquairyService.PaginatedSearch(Request
1 запрос) в D:\CoreProject\Ifin.Business\Service\InquairyService.cs:line 367\r\n в Ifin.Api.Controllers.InquiryController.PaginatedSearch (запрос Request`1) в D:\CoreProject \Ifin.Api\Controllers\InquiryController.cs:line 77",
"Message": "Выражение LINQ 'DbSet\r\n .Where(c => c.ExtraInfo == null ? False : JsonConvert. DeserializeObject(c.ExtraInfo)\r\n .Where(x => x.Key == "StaffCode")\r\n .Select(s => s.Value) \r\n .FirstOrDefault() == __staffCode_0 && c.Organization == __organiztionId_1)' не удалось перевести. Либо перепишите запрос в форме, которую можно перевести, либо явно переключитесь на клиентскую оценку, вставив вызов AsEnumerable(), AsAsyncEnumerable(), ToList() или ToListAsync(). Дополнительную информацию см. на https://go.microsoft.com/fwlink/?linkid=2101038.",
"Data": {},
"InnerException": null,
"HelpLink ": null,
"Source": "Microsoft.EntityFrameworkCore",
"HResult": -2146233079

из этого
Выражение LINQ 'DbSet\r\n .Where(c => c.ExtraInfo == null ? False : JsonConvert.DeserializeObject(c.ExtraInfo)\r\n .Where( x => x.Key == "StaffCode")\r\n .Select(s => s.Value)\r\n .FirstOrDefault() == __staffCode_0 && c.Organization == __organiztionId_1)' не удалось перевести Либо перепишите запрос в форме, которую можно перевести, либо явно переключитесь на оценку клиента, вставив вызов AsEnumerable(), AsAsyncEnumerable(), ToList() или ToListAsync(). См. https://go.microsoft. .com/fwlink/?linkid=2101038 для получения дополнительной информации.
Я понимаю, что выражение linq не может быть преобразовано для поиска значения по ключу в этом json
Какое правильное решение для этого сценария?

Подробнее здесь: https://stackoverflow.com/questions/791 ... pression-o
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Является ли `[] (std :: list и list) {return std :: move (list);} (list)` гарантированно оставить `list` yelm?
    Anonymous » » в форуме C++
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Сериализовать List> как JSON
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Обновление значения даты SentOn в файле .msg, сохраненном в локальной папке.
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Почему list+="_" работает, а list=list+"_" нет? [дубликат]
    Anonymous » » в форуме Python
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • Что необходимо передать для IEnumerable>>?
    Anonymous » » в форуме C#
    0 Ответы
    50 Просмотры
    Последнее сообщение Anonymous

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