我有一个返回名为“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/