如何仅在字母数字比较中使用Entity Framework和LINQ进行查询?我有一个带有AccountNumber字段的数据库表,其中包含特殊字符,因此示例帐号可能如下所示:803-2234502-345
。但是,我要搜索的帐号不会包含特殊字符:8032234502345
string accountNumber = "8032234502345";
Provider provider = dbContext.Providers.Where(p => p.AccountNumber == accountNumber).FirstOrDefault();
我尝试在比较的两边添加Regex.Replace
,但我得到一个例外:
LINQ to Entities无法识别方法'System.String Replace(System.String,System.String)'方法,并且此方法无法转换为商店表达式。
感谢任何帮助或建议。
答案 0 :(得分:1)
您正在使用Linq to Entities,因此只能在enities mappers中使用映射到SQL的函数。您可以更改用于正确映射到SQL的函数(尽管我怀疑使用Regex,您将无法做到这一点 - 必须进行更多的手动比较),或者(如评论中提到的@Dabblernl) )将您的提供程序(或提供程序的子集)加载到列表/或可枚举,然后运行正则表达式。
类似于:
Provider provider = dbContext.Providers.Where(p => p != null && p != "").ToList()
.Where(p => *Do regex comparison here*).FirstOrDefault();
SQL的可能映射在这里:http://msdn.microsoft.com/en-us/library/bb738681.aspx