将 HashSet<string> 与 LINQ 中的字符串数组进行比较?

Compare a HashSet<string> with an array of strings in LINQ?

提问人:Imogen 提问时间:10/18/2023 最后编辑:Captain KenpachiImogen 更新时间:10/18/2023 访问量:70

问:

我有一个名为 LabelFilter 的 List。Label 有一个 Name 字段,该字段只是一个字符串,例如“Test1”或“Test2”等。我可以轻松地将此列表转换为字符串类型或长字符串的数组。唯一重要的是字符串,而不是 ID。

我有一个 IQueryable 结果,这是我正在过滤的数据集。每个日志都包含一个名为 Label 的字段,该字段可以是以下“Test2 , ”或“Test2 , Test3, Test1, ”或 NULL 或 “Test3 , Test1, ”。

我只想返回至少有一个匹配字符串的记录。

例如,如果 LabelFilter 包含标签“Test1”和“Test3”,则应返回标签等于“Test2 , Test3, Test1, ”和 “Test3 , Test1, ” 的结果。

我收到一个 CS0854 - 当我使用时,表达式树可能不包含使用可选参数错误的调用或调用:

results = results.Where(result => result.Label != null && result.Label.Split(',').Where(x => sb.ToString().Contains(x))));

从那以后,我尝试了几种不同的方法,但我仍然没有得到预期的结果:(

这也是我尝试过的:

if (LabelFilter != null && LabelFilter.Count > 0)
    {
        var labelArray = new HashSet<string>(LabelFilter.Select(s => s.Name)); // labelArray[0] = "Onhold" 


        foreach (var item in results)
        {
            if ( item.Label != null)
            {
                var t = item.Label.Split(",", System.StringSplitOptions.None); // t[0] = "Onhold" / t[1] = "Test" / t[2] = "test4" / t[3] = "" 

                var s = item.Label.Split(',', StringSplitOptions.TrimEntries); // s[0] = "Onhold" / s[1] = "Test" / s[2] = "test4" / s[3] = ""

                // Currently using
                var u = item.Label.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); // u[0] = "Onhold" / u[1] = "Test" / u[2] = "test4" 

                var v = item.Label.Split(',').Where(x => !string.IsNullOrWhiteSpace(x)); // IEnumerable v[0] = "Onhold" / v[1] = "Test" / v[2] = "test4" 
            }             
        }


        results = results.Where(r => r.Label != null && r.Label.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Where(x => !string.IsNullOrWhiteSpace(x)).Any(l => labelArray.Contains(l)));
}
C# 字符串 CSV LINQ 哈希集

评论

0赞 user16606026 10/18/2023
您的项目有 LinqKit 吗?
0赞 Good Night Nerd Pride 10/18/2023
您是否尝试过显式传递可选的第二个参数的默认值?尝试:。string.Split()result.Label.Split(',', StringSplitOptions.None)

答: 暂无答案