提问人:Imogen 提问时间:10/18/2023 最后编辑:Captain KenpachiImogen 更新时间:10/18/2023 访问量:70
将 HashSet<string> 与 LINQ 中的字符串数组进行比较?
Compare a HashSet<string> with an array of strings in LINQ?
问:
我有一个名为 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)));
}
答: 暂无答案
评论
string.Split()
result.Label.Split(',', StringSplitOptions.None)