c# - Linq 未按预期执行

标签 c# sql-server asp.net-mvc linq

我有一个函数可以从数据库中名为 users 的表中获取所有用户,其中 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));
        }
}

如果传递给此函数的所有参数都为空,但如果其中一个参数有值,则无论用户是否已在组中,该函数都会返回所有用户,一切正常。

谁能解释一下这是怎么发生的以及如何解决这个问题?

最佳答案

groupIdnull 时,UserIds.Contains(m.id) 将始终评估为 false 并且这就是我们的意图。因此看起来这里的罪魁祸首是 ! 下面一行中的运算符..

var users = db.users.Where(m => !UserIds.Contains(m.id));

关于c# - Linq 未按预期执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49714454/

相关文章:

c# - 从页面文件读取/写入

c# - 使用 C# 读取 userAgent

c# - 在 C#.net 中使重叠的图片框透明

sql-server - 使用 Azure 应用服务从 Excel 文件读取数据的推荐方法?

sql-server - 在 SQL Server 上转换为 float 并用零填充

SQL、MVC、 Entity Framework

asp.net - 我可以将 JSON 字符串转换为 JsonResult 吗?

javascript - MVC 中的 JQuery - 使用 getJson 将表单数据作为数组发送

c# - 如何为对象列表进行表单输入?

c# - 转发器并在页面加载时将列添加到标题和项目模板