Как использовать предложение Except в запрашиваемом контексте - PullRequest
0 голосов
/ 15 октября 2019

Я использую Asp.Net Core com Scaffolding для генерации контекста и моделей.
Мне нужно проверить сравнение, кроме двух таблиц.

В 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();
}

1 Ответ

2 голосов
/ 15 октября 2019

попробуйте это

//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, который теперь сгенерирует список идентификаторов NOT IN в списке OtherClass.UserId

, вы также можете сделать этов одном запросе

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