{"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.GetAsyncEnumerator(CancellationToken cancellationToken)\r\n at System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable
Код: Выделить всё
1 source, CancellationToken cancellationToken)\r\n at Ifin.Persistence.Repositories.BaseRepository
Код: Выделить всё
1 filter, Func
Код: Выделить всё
1 BankId, String status, Int32 organiztionId, Nullable
Код: Выделить всё
1 endDate, Nullable
Код: Выделить всё
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
"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