当使用 Ling 到 SQL 时,这是访问值的正确方法吗?我尝试返回一个 IQueryable,但收到一条错误消息,指出“DataContext 在 Dispose 之后访问。”并因此将其转换为列表。有人可以告诉我这是否可以,或者建议我一些您认为会更有效率的其他答案。我可以在将要获取数据的所有其他函数中使用相同的实现吗?请帮忙。
public List<SS_User> Login(string UserName,String Password)
{
using (DbContext = new DALDataContext())
{
IQueryable<SS_User> User = (from Users in DbContext.SS_Users
where (Users.UserName == UserName && Users.Password == Password)
select Users);
return User.ToList<SS_User>();
}
}
最佳答案
它会完成这项工作。请注意,您过于具体会让自己的生活变得艰难 - 您可以这样做:
return (from user in dB.Users
where {your test}
select user).ToList();
但这在操作上没有任何不同。
想法:
- 你不应该期望这里有零个或一个匹配项吗?不是多个? (FirstOrDefault/SingleOrDefault)
- 我怎么说这个.. 停止存储密码。不完全是;停下来。仅加盐哈希。
有关返回 IQueryable 时它不起作用的原因是 查询 是“延迟的”——它还没有被执行。如果您在迭代查询(foreach、ToList 等)之前处理数据上下文(“使用”),则查询无法工作。这就像从水龙头上取下软管,然后走到“业务端”,打开喷嘴,想知道为什么没有水。
关于c# - 从数据库 LinqToSql 访问值的任何更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16748055/