如何在可查询上下文中使用子句 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();
我正在使用 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
NOT IN
您也可以在一次查询中完成
var filteredIds = _context.AspNetUsers
.Where(netUser =>
!_context.OtherClass
.Select(r => r.UserId).Contains(netUser.Id))
.Select(filtered => filtered.Id).ToList();