2017-12-18 451 views
-2

请考虑这个字符串列表:获取包含另一个列表的项目列表

Afghanistan, Albania, Algeria, El Salvador, 
Equatorial, Guinea, Eritrea, Estonia 
Ethiopia, Panama, Papua, Paraguay 
Peru, Togo, Trinidad & Tobago, Tunisia, Turkey 

,我有另一个列表:

tan, ia, Tu 

我想包含taniaTu所有国家。如何在没有foreach循环的情况下做到这一点?

感谢

+0

你尝试过这么远吗?你能发布你的代码吗? –

+0

我可以用foreach和联合结果做到这一点。但我想知道是否有可能与1查询? – Arian

+0

Try * Linq *(为你执行循环) –

回答

2

尝试类似的东西;

var listA = new List<string> {"Afghanistan", "England"}; 
var listB = new List<string> {"afg"}; 
listA = listA.Where(x => listB.Any(k => x.IndexOf(k, StringComparison.OrdinalIgnoreCase) > -1)).ToList(); 

此外,我忽略了大小写敏感。如果您想执行区分大小写使用 x.IndexOf(k, StringComparison.Ordinal)而不是x.IndexOf(k, StringComparison.OrdinalIgnoreCase)

+0

请注意'StringComparison.OrdinalIgnoreCase'选项:它可能显示Por ** tu ** gal不应被选中(问题说明我们应该寻找'Tu',不适用于'tu') –

+0

感谢您的反馈,但是我看不到Por * tugal *包含“tu”的任何问题。 – lucky

+0

您所发表的评论是否对您有所帮助?我提到的问题是“我希望所有包含tan,ia,Tu'的国家......”。现在,请注意'Tu' 哪些(根据我的理解)很可能意味着*区分大小写*搜索:** Tu ** rkey,** Tu ** valu,但不是Por ** tu ** gal –

2

尝试的LINQ这会为您进行循环:

List<string> source = new List<string>() { 
    "Afghanistan", "Albania", "Algeria", 
    }; 

    string[] filters = new[] {"tan", "ia", "Tu"}; 

    List<string> result = source 
    .Where(country => filters.Any(filter => country.Contains(filter))) 
    .ToList(); 
1

尝试一个简单的Where语句与检查所有过滤器里面像这样:

var countries = new List<string> 
    { 
     "Afghanistan", 
     "Albania", 
     "Algeria", 
     "El Salvador", 
     "Equatorial", 
     "Guinea", 
     "Eritrea", 
     "Estonia", 
     "Ethiopia", 
     "Panama", 
     "Papua", 
     "Paraguay", 
     "Peru", 
     "Togo", 
     "Trinidad & Tobago", 
     "Tunisia", 
     "Turkey" 
    }; 
    var filters = new List<string> {"tan", "ia", "Tu"}; 
    var result = countries.Where(country => filters.Any(filter => country.Contains(filter))); 
    foreach (var resultItem in result) 
    { 
     Console.WriteLine(resultItem); 
    } 
    Console.ReadKey(); 

还要检查它在此琴:https://dotnetfiddle.net/PdZvp4

相关问题