搜索字符串列表以仅返回与Linq中的另一个字符串输入列表匹配的字符串

时间:2013-08-02 10:10:26

标签: c# linq

我正在寻找一个c#Linq解决方案。

给定一个字符串列表,让我们调用列表S

"alan.foo", "bob.htm", "dave.tea", "other.yuy"

然后,还给出了另一个字符串列表,让我们称之为X

".foo", ".htm",  ".tea"

什么是linq表达式只返回S中以X中的字符串结尾的那些记录?

3 个答案:

答案 0 :(得分:6)

var result = S.Where(x=> X.Any(y=>x.EndsWith(y)));

如果你想忽略大小写:

var result = S.Where(x => X.Any(y => x.EndsWith(y, StringComparison.CurrentCultureIgnoreCase)));

答案 1 :(得分:1)

试试这个;

List<string> S = new List<string>() { "alan.foo", "bob.htm", "dave.tea", "other.yuy" };
List<string> X = new List<string>() { ".foo", ".htm", ".tea" };

var newlist = S.Where(n => X.Any(s => n.EndsWith(s)));

foreach (var item in newlist)
{
   Console.WriteLine(item);
}

输出将是;

alan.foo
bob.htm
dave.tea

这是DEMO

答案 2 :(得分:0)

尝试这样的事情。

var list1 = new List<string> { "alan.foo", "bob.htm", "dave.tea", "other.yuy" };
var list2 = new List<string> { ".foo", "htm", ".adf" };

List<string> list3 = (from n in list1
                    from l in list2
                    where n.EndsWith(l)
                    select n).ToList();

希望它有所帮助。