gpt4 book ai didi

c# - 如何使用正则表达式和 linq to sql 进行字符串比较

转载 作者:太空宇宙 更新时间:2023-11-03 21:00:00 26 4
gpt4 key购买 nike

以下代码因错误而失败:

LINQ to Entities 无法识别“Boolean CompareNames(System.String, System.String)”方法,并且无法将此方法转换为存储表达式。

我知道我的 CompareNames 方法无法转换为 SQL 语句,但想知道一种无需从数据库中提取整个表进行比较即可完成此任务的方法。

// Use my method in Linq to Sql lambda
Repo.Get<T>(c => CompareNames(c.Name, newName)).ToList()

// Compare two names removing spaces and non-numeric characters
private static bool CompareNames(string str1, string str2)
{
str1 = Regex.Replace(str1.Trim(), "[^a-z,A-Z,0-9.]", "");
str2 = Regex.Replace(str2.Trim(), "[^a-z,A-Z,0-9.]", "");

return str1 == str2;
}

最佳答案

不创建自定义 SQL 函数就没有简单的方法。此函数为您提供了一个相当不错的起点:

CREATE FUNCTION dbo.udf_GetNumeric
(@strAlphaNumeric VARCHAR(256))
RETURNS VARCHAR(256)
AS
BEGIN
DECLARE @intAlpha INT
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric)
BEGIN
WHILE @intAlpha > 0
BEGIN
SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' )
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric )
END
END
RETURN ISNULL(@strAlphaNumeric,0)
END
GO

https://blog.sqlauthority.com/2008/10/14/sql-server-get-numeric-value-from-alpha-numeric-string-udf-for-get-numeric-numbers-only/

只需将函数中的模式替换为兼容的 like 语句即可:

'%[^A-Za-z0-9.,]%'

您可以 call a user defined function from LINQ to SQL .

关于c# - 如何使用正则表达式和 linq to sql 进行字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46381053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com