从db中删除空格会导致LINQ查询

时间:2018-04-10 15:39:14

标签: c# entity-framework linq

我正在尝试从数据库中的后置代码字段中删除空格,这样当我将它与用户输入进行比较时,我正在比较两个字符串,后面的代码中没有空格,所以它应该无关紧要如何输入邮政编码。

这是我的LINQ查询,其替换功能似乎不起作用:

List<SchoolReferanceDTO> res = db.SchoolReferences.Where(x => x.SchoolReferencePostcode.Replace(" ", "").Contains(Postcode)).Select(x => new SchoolReferanceDTO()
                {
                    SchoolReferenceSchoolId = x.SchoolReferenceSchoolId,
                    SchoolReferenceEstablishmentName = x.SchoolReferenceEstablishmentName,
                    SchoolReferenceStreet = x.SchoolReferenceStreet,
                    SchoolReferenceLocality = x.SchoolReferenceLocality,
                    SchoolReferenceAddress3 = x.SchoolReferenceAddress3,
                    SchoolReferenceTown = x.SchoolReferenceTown,
                    SchoolReferenceCounty = x.SchoolReferenceCounty,
                    SchoolReferencePostcode = x.SchoolReferencePostcode,
                    SchoolReferenceEmail = x.SchoolReferenceEmail
                }).ToList();

我将它与之比较的字符串:

postcode = postcode.Replace(" ", string.Empty);

1 个答案:

答案 0 :(得分:2)

一种方法是删除Replace,然后使用LIKE。由于邮政编码通常较短,您可以将目标代码ST14BJ转换为%S%T%1%4%B%J%demo),并使用LIKE运算符:

var postPattern = Regex.Replace(postcode, "(?<=.|^)(?=.|$)", "%");
List<SchoolReferanceDTO> res = db.SchoolReferences
    .Where(x => SqlFunctions.PatIndex(postPattern, x.SchoolReferencePostcode) >= 0)
    .Select(...);