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表达式以仅返回那些不在分配表中的用户名的最佳方法是什么?


交互式爱情
浏览 211回答 2
2回答

白衣非少年

您需要使用DefaultIfEmpty进行左连接。如下所示:from u in Usernames join a in Assignments on u.Username equals a.Username into userAssignmentsfrom ua in userAssignments.DefaultIfEmpty()    where ua == null    select u
打开App,查看更多内容
随时随地看视频慕课网APP