【问题标题】:How do I get a variable from a query?如何从查询中获取变量?
【发布时间】:2014-05-14 03:31:12
【问题描述】:

这是我的查询:

       var query = from d in db.Users
                    where user.UserName == d.UserName && user.Password == d.Password
                    select d;

现在我知道查询要么为空(如果用户凭据不匹配)要么只返回一个用户。我现在的问题是我想访问那个用户的变量。怎么做?我试过使用这行代码:

        foreach (var item in query)
        {
            Session["id"] = item.ID;
            Session["name"] = item.UserName;
            Session["type"] = item.Type;
        }

但这会导致我的程序崩溃(我知道查询不为空,所以这不是问题)。

【问题讨论】:

  • 崩溃怎么办?什么例外?
  • 程序本身并没有崩溃,当我运行程序时,更多的 Internet Explorer 崩溃了。
  • Internet Explorer 崩溃与您向我们展示的任何内容无关。我怀疑您所说的 Internet Explorer“崩溃”只是标准的 asp.net 黄色错误屏幕。如果是这样,只要您不使用custom errors 操作,此 包含堆栈跟踪。这将是 IE 仅显示标准的 asp.net 错误页面 - IE 本身没有任何问题。您会在任何其他浏览器中看到相同的内容。
  • 让我澄清一下,崩溃是指我得到“本地主机没有响应”。
  • @Razer 我怀疑您发布的代码与“本地主机没有响应”有关。您可以访问本地主机上的任何内容吗?有时这可能只是由于您的主机文件中没有127.0.0.1 localhost,或者在主机文件中将其注释掉(位于`%systemroot%\system32\drivers\etc`)

标签: c# database linq asp.net-mvc-5


【解决方案1】:

如果集合为空,您通常可以使用SingleOrDefault 返回null,但如果TSource 定义了其他内容作为默认值,它也可以返回其他内容,因此请谨慎使用。

var user = (from d in db.Users
            where user.UserName == d.UserName && user.Password == d.Password
            select d).SingleOrDefault();

【讨论】:

  • -1 未在您的答案中添加支持信息。
  • query 永远不会为空,因为您刚刚分配了它。您使用.Single() 的第一个解决方案仍会引发异常。您使用.SingleOrDefault() 的第二个示例不会返回查询,而是返回元素本身。
  • @metacubed 抱歉,我有一段时间没用这个了。你是对的,如果集合为空,Single 会抛出异常,所以无论如何他可能最好使用SingleOrDefault
  • @Namfuak 我更正了您的样本。还必须移动链接以绕过最少 6 个字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多