2015-05-04 75 views
0

我有两个字符串列表。2个列表之间如何通过StartsWith

var list1 = new List<string> { "1", "12", "21", "34", "22" }; 
var list2 = new List<string> { "1", "2" }; 

我需要列表1中选择项目,其中项目StartsWith在列表2项目:"1", "12", "21", "22"

//foreach solution : "1", "12", "21", "22" 
var result1 = new List<string>(); 
foreach (var item in list2) 
    result1.AddRange(list1.Where(x => x.StartsWith(item)).ToList()); 

//linq solution : "1" 
var result2 = list1.Where(x => list2.Contains(x)).ToList(); 

我怎样才能通过LINQ解决方案中获得result1

回答

3

您可以使用Where组合与Any,如:

var query = list1.Where(s1 => list2.Any(s2 => s1.StartsWith(s2))).ToList(); 

,你将结束:

{"1","12","21","22"} 

另一种选择是做交叉连接,然后查询,如:

var query = from s1 in list1 
      from s2 in list2 
      where s1.StartsWith(s2) 
      select s1; 
2
var result = list1.Where(x => list2.Any(y => x.StartsWith(y)).ToList();