【问题标题】:Filter two arrays in LINQ在 LINQ 中过滤两个数组
【发布时间】:2021-07-22 05:28:33
【问题描述】:

我有一个清单:

List<string> userGroups;

userGroups 有类似这样的元素:

"Electronic"
"Mechanical"
"Computer"

还有一个查询:

IQueryable<UserRole> userRoles = Query(); //fetched from DB

userRoles 有类似这样的元素:

GroupName AliasName
Electronic,Computer,Science ELC
Mechanical,Hardware 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# arrays list linq compare


【解决方案1】:

我认为这会做你想要的

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

它将保留所有UserRoles 的GroupNames 至少包含userGroups 中的一个元素。

【讨论】:

  • 问题是userRolesIQueryable 并且OP 想要延迟执行而不是物化集合并执行内存中的操作。所以,这行不通。
  • @41686d6564 我读了它,因为他们已经获取了数据并将其保存在内存中,只是想要 linq 的懒惰
猜你喜欢
  • 2015-02-28
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 2015-08-04
  • 1970-01-01
相关资源
最近更新 更多