我有字符串列表IEnumerable<string> companies
包含公司,即麦当劳,sony inc 。
我想与数据库中的值进行比较。我从数据库中获取列表,在foreach循环中我比较
if (companies.Any(c => c.Contains(name.ToLower())))
{...}
在数据库中我有公司,即 mcdonalds inc,sony
使用&#34; sony&#34;进行搜索它找到了。当我使用&#34; mcdonalds inc&#34;它没有。因为附加词&#34; inc&#34;
我知道我比较公司。任何(包含(mcdonalds inc))并且它找不到它。
有关如何扩展if条件并通过诗歌进行比较的任何建议
答案 0 :(得分:0)
为什么不将您的字符串列表与数据库进行比较,而不是将数据库与列表进行比较?
foreach(var name in list)
{
if(table.Any(t => SqlMethods.Like(name, string.Format("%{0}%", t.Column))
{ ...
}
}
这将捕捉名称广泛但不完全相同的差异。
答案 1 :(得分:0)
您可以在比较之前调用Split,并仅比较列表中的第一个元素。在这种情况下,您总是会丢弃'inc'。 这当然只有在您的问题发生时才会起作用,因为您可能有必须丢弃的后缀。
答案 2 :(得分:0)
这取决于你需要字符串匹配的模糊程度。例如,您可能无法从字符串中删除所有出现的inc,因为名为“The inc company”或“Inception”的公司可能会受到影响。
对于您的具体示例,您基本上需要从字符串的末尾删除一些术语(比如说inc,incorpate和llc)。我们还要说字符串末尾可能不止一个术语。您可以使用正则表达式执行此操作,例如
Regex termRemover = new Regex("^(?<companyName>.*?)(\\s+(inc|incorporated|llc))*$");
然后可以在您的示例中使用
string scrubbedName = termRemover.Match(name.ToLower()).Groups["companyName"].Value;
if (companies.Any(c => c.Contains(scrubbedName)))
{...}
(加上错误检查等,为简洁而放在这里)。公司清单应在使用前以相同方式清洗;否则你的索尼公司将永远不会匹配任何磨砂只是索尼。