如何在可查询上下文中使用子句 Except

How to use clause Except in queryable context

我正在使用 Asp.Net 核心 com 脚手架生成上下文和模型。
我需要检查 2 个表之间的例外比较。

在 SQL 服务器中这项工作:

SELECT Id FROM AspNetUsers a
EXCEPT 
SELECT UserId FROM OtherClass

但在上下文中不起作用。我试过这个:

如何实现这些参数?:_context.AspNetUsers.Except()
我尝试 .FromSql 失败了

public IActionResult Create()
{
    ViewData["UserId"] = new SelectList(_context.AspNetUsers.FromSql(@"SELECT Id FROM AspNetUsers a EXCEPT SELECT UserId FROM OtherClass"), "Id", "UserName");
    return View();
}

试试这个

//will generate list of ids to be excluded
var exceptIds = _context.OtherClass.Select(oc => oc.UserId).ToList();

//will generate list of filtered ids
var filteredIds = _context.AspNetUsers.Where(netUser => !exceptIds.Contains(netUser.Id)).Select(x => x.Id).ToList();

这将反转 Contain,后者现在将在 OtherClass.UserId

列表中生成 ID 列表 NOT IN

您也可以在一次查询中完成

var filteredIds = _context.AspNetUsers
                          .Where(netUser => 
                                    !_context.OtherClass
                                    .Select(r => r.UserId).Contains(netUser.Id))
                          .Select(filtered => filtered.Id).ToList();