LINQ to Entities无法识别方法Replace?

Ray*_*phy 7 c# asp.net entity-framework

如何在实体框架中使用replace方法.我使用以下代码但遇到错误.

using (SepasProjectEntities sp=new SepasProjectEntities())
{
var query = (from p in sp.HISAccidentLocationMappings
                         where p.Name.Replace('y','x').Contains(txt1.Text)
                         select p
                           ).ToList();
}
Run Code Online (Sandbox Code Playgroud)

System.Data.Entity.dll中出现"System.NotSupportedException"类型的异常,但未在用户代码中处理

附加信息:LINQ to Entities无法识别方法'System.String Replace(Char,Char)'方法,并且此方法无法转换为存储表达式.

Ser*_*nov 11

基于这篇包含Entity Framework支持的方法列表的MSDN文章 - 只支持一个Replace方法的重载,它是

System.String Replace(String oldValue, String newValue)
Run Code Online (Sandbox Code Playgroud)

并不是

System.String Replace(char oldValue, char newValue)
Run Code Online (Sandbox Code Playgroud)

你正在使用.尝试用字符串版本替换它

Name.Replace('y','x')
Run Code Online (Sandbox Code Playgroud)

Name.Replace("y","x")
Run Code Online (Sandbox Code Playgroud)

我没有尝试过,但根据文档它应该工作


Keh*_*mme 9

我通常使用其他格式的LINQ查询,如下所示:

using (SepasProjectEntities sp = new SepasProjectEntities())
{
    var query = sp.HISAccidentLocationmappings
                    .Where(p => p.Name != null
                        && p.Name
                            .Replace("y", "x")
                            .Contains(txt1.Text))
                    .ToList();
}
Run Code Online (Sandbox Code Playgroud)

Replace(char, char)不行,但Replace(string, string)会.Contains(string)也应该工作.

  • 这样,您将从数据库加载所有 HISAccidentLocationmappins 对象,然后在服务器端过滤它们。例如,如果数据库中的该表有 10000 条记录,而 WHERE 只会过滤其中的 5 条记录,那么所有 10000 条记录都将加载到应用程序中,这是对资源的极大浪费。 (2认同)