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

Hui Liu-MSFT 48,711 信誉分 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:

开发人员技术 | .NET | Entity Framework Core
0 个注释 无注释

问题作者接受的答案

匿名
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 个其他答案

排序依据: 非常有帮助

你的答案

提问者可以将答案标记为“已接受”,审查方可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。