如何比较字符串并选择一个匹配的
本文关键字:一个 选择 字符串 何比较 比较 字符 串并 | 更新日期: 2023-09-27 18:15:10
我有一个这样的字符串:
string myString1 = "DOE, JOHN BE DOE, JANE"; //or
string myString2 = "DOE SMITH, JOHN BE DOE SMITH, JANE MARIE"; //or
string myString3 = "DOE, JOHN DOE, JANE"; //or
和一个名为People的记录列表,如下所示:
Name | Surname | Family
JOHNBE | DOE | JANE DOE
JOHNDA | DOE | JANE DOE
JOHNMU | DOE | JANE DOE
JANE | SMITH | MARIE SMITH
PAUL | CARTER | JOSEPH CARTER
...
我想选择第一个记录时,字符串是像myString1。
我还需要它来确定是否发生了其他情况。
我试着:
把myString放到一个列表中:
var myList = {"DOE", "JOHN", "BE", "DOE", "JANE"}
并检查是否包含。
var test = People.Where(p => myList.Contains(p.Name));
返回0,因为Name不存在。
尝试选择" "之后的第一个单词,像这样:
var name = myString.Substring(item.ChildName.IndexOf(",") + 2).Split(' ').FirstOrDefault();
返回"JOHN"则:
var test = People.Where(p => p.Name.Contains(name));
返回3条记录。
问题来了:
当我运行myString1时,它返回0,它应该选择第一个记录,列名称有名称和中间名称在一起,所以有时它会在一起,有时在两个单词中分开,例如。约翰比约翰比约翰。这有意义吗?
myString将是姓氏,firstname空间,middlename空间,surnameForFamily, firstname, family空间,middleameforfamily
有人知道怎么做这个搜索吗?
我可以使用相等比较器使其工作。
public class NameComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
if (y.Contains(x))
return true;
return false;
}
public int GetHashCode(string obj)
{
return obj.GetHashCode();
}
}
然后在你的查询实现如下:
var myList = new List<string>() { "DOE", "JOHN", "BE", "DOE", "JANE" };
var comp = new NameComparer();
var test = People.Where(x => myList.Contains(x.Name, comp));
通过使用Pieter的部分建议使其工作。
解决方案:
开始从mystring1中获取名字,例如:"JOHN",这是字符串中唯一有效的已知部分(第一个逗号后的第一个单词),
然后在People表中,我选择与单词"JOHN"匹配的所有内容,它返回3行,从列名中剥离单词"JOHN",最后根据myList检查列名,它只返回右行。在mystring1中可能出现的其他情况下进行了测试,并且似乎工作正常。
谢谢Pieter的建议