c# - 在 LINQ 中过滤两个数组
问题描述
我有一个清单:
List<string> userGroups;
userGroups 有这样的元素:
"Electronic"
"Mechanical"
"Computer"
和一个查询:
IQueryable<UserRole> userRoles = Query(); //fetched from DB
userRoles 有这样的元素:
团队名字 | 别名 |
---|---|
电子、计算机、科学 | ELC |
机械、五金 | MC |
现在我想要这样的功能:
如果“ userGroup ”中的任何元素与表的GroupName匹配,我应该从表中选择该行。请注意,GroupName包含逗号分隔的值,需要根据userGroup元素进行检查。
如果 GroupName 不是逗号分隔值,则以下代码将起作用:
userRoles = userRoles.Where(r => userGroups.Contains(r.GroupName));
我想要这样的东西:
userRoles = userRoles.Where(r => userGroups.Intersect(r.GroupName.Split(",").ToList()).Any());
但不幸的是,上面的代码不起作用!
我可以通过 foreach 实现此功能,但我不想在内存中操作,而是更喜欢延迟执行,很可能使用 linq。
有什么建议么?
解决方案
我认为这会做你想要的
userRoles = userRoles.Where(x => x.GroupName.Split(',').Any(userGroups.Contains));
它将保留所有那些UserRole
sGroupName
包含至少一个元素的 s userGroups
。
推荐阅读
- imagemagick - Imagemagick将pptx转换为jpg在ghostscript调用中失败
- reactjs - 在 React js 中调用 php 文件时出现 404 错误
- javascript - 使用 ajax 和 mpdf 将 html 转换为 pdf
- tfs - TFS 2015 XAML 构建迁移到 Azure DevOps
- java - 在 Java 中,我们可以在一个类中创建多少个构造函数?
- c++ - 使用 CoDiPack 自动区分
- c# - 如何使用 emailid 检索 Outlook 属性?
- regex - 如何使用正则表达式验证段落内的 URL
- javascript - 在表单提交时调用测试反应函数
- c# - 在 C# 中将选定的属性添加到列表并作为 API 调用返回