c# - LINQ sql 表达式以排除其他表中存在的数据
问题描述
我正在尝试编写一个 LINQ 查询以返回尚未分配的用户名列表。我的Usernames
表如下所示:
Id | Username
1 | user.1
2 | user.2
3 | user.3
该Assignments
表仅包含用户名,旁边还有一些其他数据:
Username | SomeOtherData
user.1 | foo
user.3 | bar
我尝试编写的 LINQ 查询应该user.2
在上面的示例中返回。
不幸的是,我的查询返回了太多用户,我不确定如何调整我的 LINQ 表达式:
from u in Usernames
join a in Assignments on u.Username equals a.Username
where u.Username != a.Username
select u
添加 Distinct() 方法会过滤结果集,但仍会返回分配的用户名:
(from u in Usernames
join a in Assignments on u.Username equals a.Username
where u.Username != a.Username
select new { u }).Distinct()
调整这些 LINQ 表达式以仅返回那些不在分配表中的用户名的最佳方法是什么?
解决方案
您正在使用用户名加入两个表,这不会返回两个表中不常见的用户名。您需要选择分配表中不存在的用户名。
Context.Usernames.Where(x=> !Assignments.Select(y => y.Username).Contains(X.Username));
编写相同查询的另一种方式:
Context.Usernames.Where(x=> Assignments.All(y => y.Username ! = x.UserName));
推荐阅读
- django - 在 Django 中聚合分组字段时返回对象
- java - Maven Failsafe 因 java.lang.NoClassDefFoundError 而失败
- javascript - 动态表单操作 URL
- python - 为什么使用 importlib 而不是 exec import
- firebase - 使用 auth.uid 的基于查询的规则不起作用
- javascript - 使传单地图顶部的 SVG 不响应平移事件
- ojalgo - ojAlgo 中矩阵的秩
- testing - TestNG 和 DataProvider - 如何处理好的失败测试
- c# - 如何将 UserManager 注入 ASP.NET Core 2.0 中的另一个服务
- javascript - 查询 | Mousedown 和 Mouseup