LINQ查询中的正则表达式

0g0grzrc  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(132)

我有一个这样的LINQ语句:

var query = from s in persons
            where (string.IsNullOrEmpty(name) || s.Name.trim().contains(name)) &&
                  (string.IsNullOrEmpty(email) || s.Email.contains(email)) &&
                  (string.IsNullOrEmpty(zip) || s.Zip == zip)
            select s;

name字段来自可以在网页上键入名称的用户,然后我需要在persons表中搜索该特定名称。不幸的是,名字First Name和Last Name在数据库中的同一列中,另一个问题是在First Name和Last Name之间有两个空格,例如。如果他的名字是史蒂夫·拉姆齐数据库中的名称是这样的:

Steve  Ramsey

并不是所有的名字都是这样存储的,只有很少的名字是这样的。我使用Regex来消除一个额外的空间:

Regex regex = new Regex("[ ]{2,}", options);
CustName = regex.Replace(CustName, " ");

我不知道如何把这个正则表达式在LINQ查询

ioekq8ef

ioekq8ef1#

在LINQ-to-SQL中直接使用Regex.Replace是不可能的。我有两个选择,我认为第一个是最好的。使用SqlMethods.Like方法来做你想做的事情。

我的解决方案:

var query = from s in persons
            where (string.IsNullOrEmpty(name) || SqlMethods.Like(s.Name, "%" + name + "%")) &&
                  (string.IsNullOrEmpty(email) || s.Email.Contains(email)) &&
                  (string.IsNullOrEmpty(zip) || s.Zip == zip)
            select s;

这应该能解决你的问题。别忘了导入这个类:

using System.Data.Linq.SqlClient;

相关问题