lambda linq not join c#

本文关键字:join not linq lambda | 更新日期: 2023-09-27 18:03:24

我有一个查询,它向我返回useridaccess表中的用户和users的名称,我想要的是将不在access中的用户的userid还给我。:

 var query = db.Users
      .Join(db.Access, c => c.UserId, o => o.UserId,
       (c, o) => new { c.UserId, c.Name });

在sql中,它应该是这样的:

SELECT  Users.Name
FROM     Access INNER JOIN
               Users ON Access.UserId <> Users.UserId

lambda expression与sql脚本等价于什么?

lambda linq not join c#

使用Except

var res = db.Access.Except(query);

您也可以使用! Contains(),如下所示:

//Get Access user ids into an array
var AccessUserIds = db.Access.Select(a => new {a.UserId}).ToArray();
//Users who are not in Access user id array
var Results = db.Users.Where(u => !AccessUserIds.Contains(u.UserId));
var exclude = db.Access.Select(p => p.UserId);

var us = db.Users.Where(q => !exclude.Contains(q.UserId)).ToList();

ViewBag.UsersId = new SelectList(us, "UserId", "Name");

最后,这是正确的答案,唯一的区别在于第一行。

谢谢大家!