如何使用字母数字比较查询Entity Framework?

时间:2013-02-13 21:55:58

标签: c# linq entity-framework

如何仅在字母数字比较中使用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)'方法,并且此方法无法转换为商店表达式。

感谢任何帮助或建议。

1 个答案:

答案 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