首页 > 解决方案 > 在 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。

有什么建议么?

标签: c#arrayslistlinqcompare

解决方案


我认为这会做你想要的

userRoles = userRoles.Where(x => x.GroupName.Split(',').Any(userGroups.Contains));

它将保留所有那些UserRolesGroupName包含至少一个元素的 s userGroups


推荐阅读