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

问题描述 投票:0回答:1

我正在使用Asp.Net Core com脚手架生成上下文和模型。然后我需要检查2个表之间的除外比较。在sql server中这项工作:

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.net entity-framework linq iqueryable asp.net-mvc-scaffolding
1个回答
1
投票

尝试一下

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

这将反转Contain,现在将在NOT IN的列表中生成ID OtherClass.UserId的列表

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

var filteredIds = _context.AspNetUsers
                          .Where(netUser => 
                                    !_context.OtherClass
                                    .Select(r => r.UserId).Contains(netUser.Id))
                          .Select(filtered => filtered.Id).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.