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

时间:2015-01-06 14:00:10

标签: c# linq lambda

出于某种原因,我似乎无法用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);
}

我不确定我是否应该使用ContainsIndexOf

我期待从mainList取回“looking_for_specific_word”和“has_specific_word”。

3 个答案:

答案 0 :(得分:3)

我认为你想要的是:

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

答案 1 :(得分:2)

您可以使用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));

答案 2 :(得分:2)

试试这个: -

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

Working Fiddle