将我的项目从ef core 2.2升级到ef core 3.1之后,几乎所有我的实体框架LINQ查询都被破坏了
以下是我有问题的示例:
System.AggregateException:'发生一个或多个错误。 (LINQ表达式'DbSet 在哪里(b => b.IsDeleted == __displayIsDeleted_0) 哪里(b => __properties_1 .Any(p => p.GetValue((object)b)!= null && p.GetValue((object)b).ToString()。IndexOf( 值:__ 8__locals1_query_2, comparisonType:InvariantCultureIgnoreCase)> = 0))'无法翻译。以一种可以翻译的形式重写查询,或者通过插入对AsEnumerable(),AsAsyncEnumerable(),ToList()或ToListAsync()的调用来显式切换到客户端评估。有关更多信息,请参见https://go.microsoft.com/fwlink/?linkid=2101038。)'
public static IQueryable<T> WhereDynamic<T>(
this IQueryable<T> sourceList, string query)
{
if (string.IsNullOrEmpty(query))
{
return sourceList;
}
try
{
var properties = typeof(T).GetProperties()
.Where(x => x.CanRead && x.CanWrite && !x.GetGetMethod().IsVirtual);
//Expression
sourceList = sourceList.Where(c =>
properties.Any(p => p.GetValue(c) != null && p.GetValue(c).ToString()
/* .Contains(query, StringComparison.InvariantCultureIgnoreCase)*/
.IndexOf(query, StringComparison.InvariantCultureIgnoreCase) >= 0 ));
}
catch (Exception e)
{
Console.WriteLine(e);
}
return sourceList;
}
如果可能,请告诉我我应该对此代码进行哪些更改
答案 0 :(得分:0)
当无法将C#转换为SQL时,EF Core 2在客户端执行了代码。默认情况下,在EF Core 3中禁用此选项,您可以通过以下代码实现相同的行为
CrashLoopBackOff
中有关客户评估的更多信息