C# LINQ存储表达式中不支持方法

C# LINQ存储表达式中不支持方法,c#,sql,linq,C#,Sql,Linq,我使用LINQtoEntities从SQL中选择数据 这是我的声明 var employee = from p in _context.employee select p; employee = employee.Where(p => Helper.RemoveSpecialCharacters(p.IdentificationNumber). Equals(Helper.RemoveSpecialCharacters(searc

我使用LINQtoEntities从SQL中选择数据

这是我的声明

 var employee = from p in _context.employee
                      select p;

 employee = employee.Where(p =>   
 Helper.RemoveSpecialCharacters(p.IdentificationNumber).
 Equals(Helper.RemoveSpecialCharacters(search.IdentificationNumber)));

 var Results = employee.ToList();
我使用我写的RemoveSpecialCharacters方法来比较没有特殊字符的比较的两面

这里我得到一个错误,“RemoveSpecialCharacters”方法不受Linq->Entity支持,并且不是有效的存储表达式

我知道它不能翻译成SQL。但是如何使用LINQ进行这种比较呢

删除特殊字符方法

 public static string RemoveSpecialCharacters(string str)
    {
        char[] arr = str.Where(c => (char.IsLetterOrDigit(c))).ToArray();

        str = new string(arr);

        return str;
    }
如果methodname被翻译成LINQ存储,那么我应该如何将其放入LINQ中,以便sql能够理解它

.ToList()
完成初始数据库查询,并为您提供 要使用和修改对象的内存中表示

.ToList()
完成初始数据库查询,并为您提供 要使用和修改对象的内存中表示


如果您可以在SQL中表达您的
删除特殊字符
,那么您可以在SQL视图中为您的员工提供一个计算的
标识号(不包含特殊字符
列),然后对其进行筛选


您还可以通过为SQL Server创建.NET程序集来重用该方法的C#实现。

如果您可以在SQL中表达您的
删除特殊字符
,则您可以使用SQL视图为员工提供一个计算的
标识号(不带特殊字符
列),然后对其进行筛选


您还可以通过为SQL Server创建.NET程序集来重用该方法的C#实现。

这将在筛选之前在内存中提取整个employee表。是的,这不是我想做的事情。即使提取整个表是唯一的解决方案,我也会将
.ToList()
替换为
.AsEnumerable()
以避免创建列表并将丢弃的对象保留在内存中。这将在筛选之前在内存中提取整个employee表。是的,这不是我想做的事情。即使提取整个表是唯一的解决方案,我也会将
.ToList()
替换为
.AsEnumerable()
避免创建列表并将丢弃的对象保存在内存中。顺便说一下,
var employee=from p in _context.employee选择p被翻译成
var employee=(_context.employee)
(C#语言规范版本5.0,7.16.2.5 Select子句)。理想情况下,您应该能够创建一个MethodCall表达式,为了使IQueryable查询能够工作,它只是无法翻译方法,当从
表达式树
编译
Func
时,请使用
正则表达式检查代码,
var employee=from p在_上下文中。employee选择p被翻译成
var employee=(_context.employee)(C#语言规范版本5.0,7.16.2.5 Select子句)。理想情况下,您应该能够创建一个MethodCall表达式,为使IQueryable查询正常工作,它只是无法转换方法,当从
表达式树编译
Func
时,请使用
Regex检查代码。替换
如何在Sql中表示
RemoveSpecialCharacters
,您应该已经回答了这一部分,随着数据大小的增加,Sql CLR或动态Sql对于性能不是很好的选择。如果没有代码,这应该更多的是注释而不是回答如何在Sql中表示
删除特殊字符
,您应该已经回答了这一部分,随着数据大小的增加,Sql CLR或动态Sql对于性能不是很好的选择。如果没有代码,这应该更多的是评论而不是回答
var employee = from p in _context.employee
                      select p.ToList();
string searchIdent = Helper.RemoveSpecialCharacters(search.IdentificationNumber);

 employee = employee.Where(p => 
 Helper.RemoveSpecialCharacters(p.IdentificationNumber).
 Equals(searchIdent));

 var Results = employee;