LINQ 查询,用于基于列表的子字符串进行筛选

本文关键字:字符串 筛选 列表 查询 用于 于列表 LINQ | 更新日期: 2023-09-27 18:31:16

我有一个查询返回一个名为"results"的列表。然后,我需要过滤该列表以排除另一个列表中具有前两个字符的子字符串的任何记录。

我的初始结果计数为 36,运行

以下内容后,filteredResults 的计数也为 36。我确保 delayCodes 列表包含一个值,该值应该在"结果"列表中返回的至少两条记录中找到。

var delayCodes = new string[] { "AT", "FA", "FC", "FP", "MI", "MT", "SD" };
var filteredResults = results.Select(i => !delayCodes.Contains(i.DLY_CODE.Substring(0,2)));

我已经做了一些搜索,我看到有些人建议使用.StartsWith 但他们通常会查看特定值,例如 。StartsWith("xx")。我不知道如何告诉查询查看我的代码列表。

关于如何让这样的东西工作的任何建议?

LINQ 查询,用于基于列表的子字符串进行筛选

如果要过滤,则必须使用Where

var filteredResults = results.Where(i => !delayCodes.Contains(i.DLY_CODE.Substring(0,2)));

下面是一种更有效(在大型集合上)的方法,它使用 LINQ"左联接":

var filteredResults =
    from res in results
    join code in delayCodes
    on res.DLY_CODE.Substring(0, 2) equals code into gj
    from lj in gj.DefaultIfEmpty()
    where lj == null
    select res;

交替到 Tims 解决方案:

var filteredResults = results.Where(i => delayCodes.All(x => x != i.DLY_CODE.Substring(0,2)));