繁体   English   中英

无法在 EF Core 3.1 中翻译 LINQ 表达式

[英]The LINQ expression could not be translated in EF Core 3.1

我正在尝试使用 EF Core 3.1 返回任何列中包含指定短语的行。 我收到异常:

InvalidOperationException: LINQ 表达式 'DbSet
.Where(b => __stringProperties_0.Any(y => __Functions_1.Like(
_: y.GetValue( obj: b, index: null).ToString(), matchExpression: __p_2)))' 无法翻译。 以可以翻译的形式重写查询,或者通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用来显式切换到客户端评估。 有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038

我怎样才能重写这个查询来避免这个异常?

public async Task<List<Table>>
        GetDataAsync(string query)
    {
        var stringProperties = typeof(Table).GetProperties().Where(prop => prop.PropertyType == query.GetType());
        return await _context.Table
             .Where(x => stringProperties
                .Any(y => (EF.Functions.Like(y.GetValue(x, null).ToString(), "%" + query + "%"))))
             .AsNoTracking().ToListAsync();
    }

我认为这个查询应该这样做,我在这里使用 EF.Property 方法而不是反射。

return await _context.Table
             .Where(x => stringProperties
                .Any(y => (EF.Functions.Like(EF.Property<string>(x, stringProperties), "%" + query + "%"))))
             .AsNoTracking().ToListAsync();

希望能帮助到你!

var persons = _PersonRepository.TableNoTracking.Where(expression)
                .ProjectTo<PersonSmallInfoDTO>(_mapper.ConfigurationProvider).AsEnumerable();

.AsEnumerable()结束你的代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM