将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
重写我的代码?
答案 0 :(得分:0)
您可以链接过滤器
var query = context.TableName.AsQueryable();
foreach(var filter in filters)
{
query = query.Where(x => !x.Name.Contains(filter) && !x.Description.Contains(filter))
}
var result = query.ToList();