【问题标题】:How to use clause Except in queryable context如何在可查询上下文中使用子句除外
【发布时间】:2020-02-11 14:27:44
【问题描述】:

我正在使用 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.net entity-framework linq iqueryable asp.net-mvc-scaffolding


    【解决方案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)).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();
    

    【讨论】:

      猜你喜欢
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      相关资源
      最近更新 更多