У меня есть функция для получения всех пользователей из таблицы с именами пользователей в базе данных, которая user_id
не содержится в таблице user_ingroup
, как показано ниже:
[Authorize]
public ActionResult DisplayUser(int? page, string groupId, string searchName, string searchPosition, string searchOffice)
{
try
{
if (null == db)
{
db = new vien_kiem_soat_streammingEntities();
}
var UserIds = from p in db.user_ingroup.Where(p => p.group_id == groupId) select p.user_id;
var users = db.users.Where(m => !UserIds.Contains(m.id));
if (!String.IsNullOrEmpty(searchName))
{
ViewData["searchName"] = searchName;
users = users.Where(us => us.full_name.ToLower().Contains(searchName.ToLower()));
}
if (!String.IsNullOrEmpty(searchPosition))
{
users = users.Where(us => us.position.Contains(searchPosition));
ViewData["searchPosition"] = searchPosition;
}
if (!String.IsNullOrEmpty(searchOffice))
{
users = users.Where(us => us.office.Contains(searchOffice));
ViewData["searchOffice"] = searchOffice;
}
ViewData["users"] = users.OrderBy(m => m.full_name).ToPagedList(page ?? 1, 2);
var positions = from p in db.users.Where(p => !UserIds.Contains(p.id)) select p.position;
List<string> pos = positions.Distinct().ToList();
ViewData["positions"] = pos;
ViewData["group"] = groupId;
return View("DisplayUser");
}
catch (Exception ex)
{
return Redirect(Url.Action("Login", "Login", null));
}
}
Все работает отлично, если все параметры, переданные этой функции, равны нулю, но если один из них имеет значение, функция возвращает всех пользователей, независимо от того, находится ли пользователь уже в группе или нет.
Кто-нибудь может объяснить мне, как это могло произойти и как это решить?
что вы имели в виду под Все работает отлично, если все параметры, которые передаются этой функции, равны нулю?
Я имел в виду, что если int? page = null и groupId = null и searchName = null и searchPosition = null и searchOffice = null Я получу всех пользователей в таблице с именами пользователей, но идентификаторы пользователей, которых я получаю, не содержатся в таблице «user_ingroup».
var users = db.users.Where(m => !UserIds.Contains(m.id));
дает вам пользователей, чей идентификатор отсутствует вuser_ingroup
правильно?!
это опечатка? поэтому, когда groupId имеет значение null,!UserIds.Contains(m.id)
будет оцениваться как true для всех пользователей.да.................!
Да, я забыл передать GroupId в каком-то случае. это работает сейчас.