【问题标题】:Linq not execute as expectedLinq 未按预期执行
【发布时间】:2018-04-08 04:35:31
【问题描述】:

我有一个函数可以从数据库中名为 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));
        }
}

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

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

【问题讨论】:

  • 你的意思是什么如果传递给这个函数的所有参数都是空的,那么一切都很好
  • 我的意思是如果 int? page = null 和 groupId =null 和 searchName =null 和 searchPosition = null 和 searchOffice = null 我将获取名为 users 的表中的所有用户,但我获取的用户的 id 不包含在表“user_ingroup”中。
  • var users = db.users.Where(m =&gt; !UserIds.Contains(m.id)); 为您提供 id 不在user_ingroup 中的用户,对吗? ! 是错字吗?因此当 groupId 为 null 时,!UserIds.Contains(m.id) 将对所有用户评估为 true。
  • 是........!
  • 是的,在某些情况下我忘记传递 GroupId。它现在正在工作。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-08-20
    • 2017-12-15
    • 2011-02-25
    • 2012-11-23
    • 2014-10-20
    • 2015-09-17
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多