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

问题描述 投票:-2回答:3

请考虑这个字符串列表:

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

我有另一个清单:

tan, ia, Tu

我想要所有包含taniaTu的国家。没有foreach循环我怎么能这样做?

谢谢

c# linq c#-4.0 lambda linq-to-entities
3个回答
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)


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

© www.soinside.com 2019 - 2024. All rights reserved.