如何匹配另一个列表中列表元素的子字符串?

How can I match substrings of a list's elements in another list?

出于某种原因,我似乎无法使用 Lambda 解决这个问题(我可以使用循环,但我宁愿在 lambda 中学习它)。

我有两个列表。我试图在第一个列表的任何字符串中找到第二个列表中的字符串。

[Test]
public void CheckInsideList()
{
    var mainList = new List<string>() { "looking_for_specific_word", "has_specific_word", "doesnt_have_word" };
    var reservedList = new List<string>() { "specific", "Bob", "Loblaws" };

    //var returnValue = mainList.Where(d => d.Contains(reservedList));
    Assert.Greater(returnValue.Count, 0);
}

我不确定我应该使用 Contains 还是 IndexOf

我期待从 mainList 返回 "looking_for_specific_word" 和 "has_specific_word"。

我想你想要的是这个:

mainList.Where(m => reservedList.Any(r => m.Contains(r));

您可以使用 Any + Contains:

1a)

var returnValue = mainList.Where(d => reservedList.Any(d.Contains));

几乎等于:

1b)

var returnValue = mainList.Where(d => reservedList.Any(r=> d.Contains(r)));

或与IndexOf(允许比较不区分大小写):

2)

var returnValue = mainList
    .Where(d => reservedList
        .Any(r => d.IndexOf(r, StringComparison.InvariantCultureIgnoreCase) >= 0));

试试这个:-

var result = mainList.Where(x => reservedList.Any(z => x.Contains(z)));

Working Fiddle.