我有一个这样的字符串:
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));
我返回零,因为名称不存在。
试图在"之后选择第一个单词,"像这样:
var name = myString.Substring(item.ChildName.IndexOf(",") + 2).Split(' ').FirstOrDefault();
返回" JOHN"然后:
var test = People.Where(p => p.Name.Contains(name));
这将返回3条记录。
所以这就是问题所在:
当我运行myString1它返回0时,它应该选择第一个记录,列Name有名称和中间名一起,所以有时它会在一起,有时用两个单词分开,例如:JOHNBE | JOHN BE |约翰。它有意义吗?
myString将是姓氏逗号firstname space middlename space surnameForFamily comma firstname for family space middlenameForFamily
任何人都知道如何进行此搜索?
答案 0 :(得分:0)
我能够使用相等比较器使其工作。
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));
答案 1 :(得分:0)
通过使用部分Pieter建议让它工作。
解决方案:
开始从mystring1获取名字,例如:“JOHN”,这是字符串中唯一有效的知识部分(第一个逗号后面的第一个单词),
然后在People表中我选择与“JOHN”一词匹配的所有内容,它返回3行,从列名中删除单词“JOHN”,最后检查列名称对myList,它只返回右行。测试了可能出现在mystring1中的其他情况,似乎工作正常。
感谢Pieter的建议。