从列表中获取包含其他列表的项目列表

时间:2013-06-28 10:28:49

标签: string linq list

我有一个字符串列表。 我想获得与其他列表匹配的列表项。 即,如果First List值包含来自其他字符串的值,则返回所有值。

 List<string> fileNameToMatch = new List<string> { "nsevar", "cat", "elm", "nse isin", "l6scripsv2eq" };
 List<string> fileToMatch = new List<string> { "fevnsevarc", "gfcatgf","ratstts","mymatch"};

第二个列表包含第一个列表中的值。 所以返回所有值。

输出应该是列表中的“fevnsevarc”和“gfcatgf”。

我们可以使用一些链接从fileToMatch获取包含来自fileNameToMatch

的数据的名称

2 个答案:

答案 0 :(得分:2)

这应该可以解决问题:

var res = fileToMatch
    .Where(f => fileNameToMatch.Any(fn => f.IndexOf(fn) >= 0))
    .ToList();

这几乎是不言自明的:您正在寻找f中的所有文件fileToMatch,以便在fn fileNameToMatch中存在文件名f fn }被包含在fn中作为子字符串的任何位置。

编辑(回复评论)要获取f以及Select,请添加var res = fileToMatch .Where(f => fileNameToMatch.Any(fn => f.IndexOf(fn) >= 0)) .Select(f => new { File = f , Name = fileNameToMatch.First(fn => f.IndexOf(fn) >= 0) }) .ToList(); foreach (var match in res) { Console.WriteLine("{0} - {1}", match.File, match.Name); } ,并使用匿名类型,例如这样:

{{1}}

答案 1 :(得分:1)

这应该有效:

var result = fileToMatch.Where(x => fileNameToMatch.Any(y => x.Contains(y)));