【问题标题】:Get List of Item that contains of another list获取包含另一个列表的项目列表
【发布时间】:2017-12-18 07:22:10
【问题描述】:

请考虑这个字符串列表:

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

我还有另一个清单:

tan, ia, Tu

我想要所有包含 taniaTu 的国家/地区。如果没有foreach 循环,我怎么能做到这一点?

谢谢

【问题讨论】:

  • 到目前为止你尝试过什么?你能发布你的代码吗?
  • 我可以在第二个列表和联合结果中使用 foreach 来做到这一点。但我想知道 1 个查询是否可行?
  • 试试 Linq(它会为你执行循环)

标签: c# linq c#-4.0 lambda linq-to-entities


【解决方案1】:

尝试类似的方法;

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)

【讨论】:

  • 请注意StringComparison.OrdinalIgnoreCase 选项:似乎不应该选择Portugal(问题表明我们应该寻找Tu,而不是对于tu)
  • 感谢您的反馈,但我看不出包含“tu”的 Portugal 有任何问题。
  • 您已将评论放在区分大小写/不区分大小写,所以,请给我 +1。我提到的问题是“我想要所有包含tan, ia, Tu...的国家/地区”。现在,请注意Tu(在我的理解中)很可能表示区分大小写搜索:Turkey、Tuvalue,但不是色情tugal
  • 最好决定哪个 OP 要使用区分大小写。如果他想区分大小写,他可以使用 Contains 或 x.IndexOf(k, StringComparison.Ordinal)。答案很清楚:)
【解决方案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(); 

【讨论】:

    【解决方案3】:

    尝试一个简单的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 2012-06-29
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多