从EF Core 2迁移到EF Core 3 ...无法转换

时间:2020-10-26 06:09:31

标签: entity-framework asp.net-core-3.1 ef-core-3.1

将我的项目从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;
    }

如果可能,请告诉我我应该对此代码进行哪些更改

1 个答案:

答案 0 :(得分:0)

当无法将C#转换为SQL时,EF Core 2在客户端执行了代码。默认情况下,在EF Core 3中禁用此选项,您可以通过以下代码实现相同的行为

CrashLoopBackOff 

article

中有关客户评估的更多信息