System.InvalidOperationException: 'LINQ 表达式 => EntityShaperExpression:

Hui Liu-MSFT 48,571 信誉分 Microsoft 供应商
2024-04-23T07:04:26.6566667+00:00
var searchs = new List<string> { "a1", "a2", "a3" };
var result = db.Products.Where(p => searchs.Any(s => p.Content.Contains(s))).ToList();

我的查询在 asp.net MVC 5 (VS 2019) 中运行正常

但是当我将 VS 2022 与 asp.net MVC Core .NET 6 一起使用时,这个查询错误,我不知道为什么

对不起,我的英语不好。

(内容为字符串)

System.InvalidOperationException: 'The LINQ expression 's => EntityShaperExpression: 
    Website.Models.Product
    ValueBufferExpression: 
        ProjectionBindingExpression: EmptyProjectionMember
    IsNullable: False
.Content.Contains(s)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.'


Note:此问题总结整理于: System.InvalidOperationException: 'The LINQ expression => EntityShaperExpression:

Entity Framework Core
Entity Framework Core
实体框架数据访问技术的轻量型、可扩展、开源、跨平台版本。
50 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Jiale Xue - MSFT 46,456 信誉分 Microsoft 供应商
    2024-04-23T08:19:42.0666667+00:00

    System.InvalidOperationException: 'LINQ 表达式的 => EntityShaperExpression: 网站.型号.Product ValueBufferExpression: ProjectionBindingExpression:EmptyProjectionMember IsNullable:False .Content.Contains(s)“无法翻译。以可转换的形式重写查询,或者通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用来显式切换到客户端计算。有关详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2101038

    正如错误消息所说,您需要重写查询语句。尝试在子句之前添加 或。AsEnumerable()ToList()where

    修改代码如下:

    var searchs = new List<string> { "a1", "a2", "a3" }; 
    var result = db.Products.AsEnumerable().Where(p => searchs.Any(s => p.Content.Contains(s))).ToList();
    

    var searchs = new List<string> { "a1", "a2", "a3" }; 
    var result = db.Products.ToList().Where(p => searchs.Any(s => p.Content.Contains(s))).ToList();
    

    我这边的结果如下:

    用户图像


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。