首页 > 解决方案 > 如何在可查询上下文中使用子句除外

问题描述

我正在使用 Asp.Net Core com Scaffolding 生成上下文和模型。
我需要检查 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();
}

标签: asp.netentity-frameworklinqiqueryableasp.net-mvc-scaffolding

解决方案


尝试这个

//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();

这将反转Containwhich 现在将在列表中生成 idNOT IN列表OtherClass.UserId

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

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

推荐阅读