C# 比较单词并获得精确匹配

C# 比较单词并获得精确匹配,c#,asp.net,sql,search,C#,Asp.net,Sql,Search,现在这很棘手。。。我希望我能解释清楚 我有一个表格,里面有名字,我需要将它与我提供的单词进行比较,得到准确的匹配结果 现在我说这很棘手,因为我尝试了这个查询,它给了我一组名称。它包含了一个完全匹配的单词,还有一些相似的单词 这就是我所做的: DataTable dt = new DataTable(); SqlConnection connection = new SqlConnection(); connection.ConnectionString = Con

现在这很棘手。。。我希望我能解释清楚

我有一个表格,里面有名字,我需要将它与我提供的单词进行比较,得到准确的匹配结果

现在我说这很棘手,因为我尝试了这个查询,它给了我一组名称。它包含了一个完全匹配的单词,还有一些相似的单词

这就是我所做的:

DataTable dt = new DataTable();
        SqlConnection connection = new SqlConnection();
        connection.ConnectionString = ConfigurationManager.ConnectionStrings["xyz "].ConnectionString;
        connection.Open();
        SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name  Like '%' + @userName + '%'", connection);
        SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);

        sqlCmd.Parameters.AddWithValue("@userName", userName);

        sqlDa.Fill(dt);
        connection.Close();
现在我想要的是。。。比如说

如果数据库有三个单词

abc123

xyz123

pqc1238

如果这个词是123,它应该 返回abc123和xyz123 如果是c123,则返回abc123,而不是pqc1238和xyz123

如果是238,则返回pqc1238

我希望我足够清楚。。。相信我,我第一次也没拿到

任何建议最好是找出单词之间的精确匹配。。因为喜欢是不够的


谢谢

据我所知,您似乎只需要以搜索模式结尾的字符串,所以您所要做的就是从选择中省略最后一个“%”

SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name  Like '%" + @userName + "'", connection);

在我看来,您正在搜索以@userName结尾的字符串

SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name  Like '%' + @userName", connection);

我不会称之为完全匹配,但如果您要查找以给定单词结尾的单词,请尝试:

"SELECT Names FROM Machines WHERE Name  Like '%' + @userName"

没有第二个%

它读起来好像您想要一个命令,它的形式是从机器中选择名称,其中名称像“%xxx”,其中“xxx”是您的单词

如果是这样,并且@userName是您的单词,那么您需要类似的东西

SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name  Like '%' + @userName", connection);

为什么不尝试使用LINQ呢?做一些类似的事情

var query = from c in db.Machines where c.Name.EndsWith("123") select c.Names;

我希望这能有所帮助。

我觉得您需要所有以特定单词结尾的记录。在这种情况下,您只需删除添加到查询中的最后一个“%”

SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name  Like '%' + @userName", connection);

希望这就是您所需要的

您几乎完全正确,但您不理解%通配符

在SQL中,%通配符将匹配任何长度的字符串。你希望一开始就这么做,因为你不在乎主要部分

但是,当您将其放在相似匹配字符串的末尾时,如果字符串后面出现任何内容,则允许进行匹配

以你为例

abc123

xyz123

pqc1238

现在,如果单词是123,则应返回abc123和xyz123如果是c123,则返回abc123和>而不是pqc1238和xyz123

如果是238,则返回pqc1238

您有%123%,您的意思是“我想要所有以任何内容开头的字符串,然后有'123',然后以任何内容结尾。”这将匹配任何点上包含'123'的字符串

你想说的是“我想要所有以任何东西开头的字符串,然后有'123',然后结束。”所以,这就是%123

最后,要获得与like的精确匹配,只需去掉任何通配符


对SQL通配符有很好的概述。

这很好。。。得到这么多的回复,我想没有人会理解。。。谢谢你所有的答案都是正确的,但是我把正确的答案给了第一个回答的人。。。对不起,我不能给所有人…你提供的答案是正确的,但用户名后没有“+”。。。我发现了…我必须开始使用LINQ。。我不擅长这项工作。。你能给我推荐一个好的地方开始阅读LINQ或任何好的教程吗。。。谢谢