После того, как я обновил Entity Framework Core с 2 до 3.0.0 и 3.1.1, мой код сломался в предложениях Linq where.
Я бы не стал использовать .AsEnumerable<ExampleObject()
Например:
List<string> exampleFilter = new List<string>(){"filter1" , "filter2"};
var IQuerable<ExampleObjects> objs = repository.GetAll().Where(wh => exampleFilter.Contains(wh.Name));//HERE1
// here code broke in v3.0.0 when apply where with contains
var count = await objs.CountAsync();
После обновления 3.0.0 до 3.1.1 последняя ошибка была решена, но теперь мой код сломался на несколько строк:
objs = objs.Where(wh => MatchFilters(wh.Name, wh.Description,filters));
// here the code broke in v3.1.1
count = await objs.CountAsync();
Это мое исключение:
Где (a => ClassName.MatchEveryFilter (
имя: a.Name,
код: a.Code,
фильтры: __filters_0)) '
не может быть переведено. Либо перепишите запрос в форме, которая может быть переведена, либо явно переключитесь на оценку клиента, вставив вызов AsEnumerable (), AsAsyncEnumerable (), ToList () или ToListAsync ()
Мой код:
private bool MatchFilters(string name, strin description , List<strings> filters)
{
foreach(var filter in filters)
{
if(!name.Contains(filter) && !description.Contains(filer))
return false;
}
return true;
}
Как я могу переписать свой код с функцией MatchFilters
внутри?