c# - LINQ 查询基于列表的子字符串进行过滤

标签 c# linq

我有一个返回名为“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")。我不知道如何告诉查询查看我的代码列表。

关于如何让这样的东西发挥作用有什么建议吗?

最佳答案

如果你想过滤,你必须使用Where:

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

这是一种使用 LINQ“Left Join”的更有效(针对大型集合)的方法:

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;

关于c# - LINQ 查询基于列表的子字符串进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34928211/

相关文章:

c# - 更改 protected 工作表

c# - 从大型 DataTable 列中选择不同的值

c# - 并行 plinq 与 linq

c# - Windows Phone 7 如何在枢轴项之间切换时删除 "stuttering"

c# - .Net、C# 和开源运动

c# - HasNoDiscriminator 在 EFCore 中的使用

c# - 将谓词作为参数传递给 Where 子句时 EF SQL 发生了变化

c# - 将使用 Linq 的代码转换为不使用 Linq 的代码

c# - SelectMany 查询太多

c# - 如何从整数列表中计算排名?