【发布时间】:2018-06-02 14:37:16
【问题描述】:
我正在尝试在 asp.net 框架中使用带有 c# 的 LINQ 访问 SQL 服务器。 我正在网页上写一个简单的登录表单。以下是我的 c# 代码,用于检查它是否在数据库中。
public int getUserId(string un, string pw)
{
IEnumerable<int> query;
using (var context = new IngredientsLinqDataContext())
{
query = from c in context.USERs
where c.Username == un && c.Password == pw
select c.UserID;
}
if(query.Count() >= 1)
{
return query.Min();//a very serious kludge. Need to fix this
}
else { return -1; }
}
}
检查查询的计数是否大于或等于 1 时会引发对象处置异常。我曾认为,由于查询是在花括号之外声明的,所以这不应该是范围问题。 另外,有什么好的方法可以解决这个问题?它应该只返回一个整数,而不是整数列表。我怎么能这样对待它?谢谢!
【问题讨论】:
-
您可以选择任何答案并按照他们所说的做...或者您可以扩展您的
using块并在您的Count()呼叫之后关闭它。会的。 -
你为什么使用
.Count() >= 1?为什么不直接使用.Any(),这样它就不必遍历整个列表来计算是否至少有一项。 -
附注(但很重要)。在当今时代,您不应该将密码作为纯文本存储在数据库中。即使这只是一个“玩具”示例,实践良好的安全纪律也是一个好主意。
-
另外,我强烈建议只使用
Single()而不是Count和Min- 你期望一个结果,所以要求一个。如果它产生多个结果或没有结果,它会抛出一个异常,这就是你应该如何处理这些错误,而不是回到 C 风格的“传回魔法值以指示错误”。