1

这是在使用 Ling 到 SQL 时访问值的正确方法吗?我尝试返回一个 IQueryable,但收到一条错误消息,指出“在 Dispose 后访问了 DataContext。” 并因此将其转换为列表。有人可以告诉我这是否可以,或者建议我一些您认为更有效的其他答案。我可以在将获取数据的所有其他函数中使用相同的实现吗?请帮忙。

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>();
            }
        }
4

1 回答 1

4

它会完成这项工作。请注意,过于具体会让您的生活变得艰难——您可以这样做:

return (from user in dB.Users
             where {your test}
             select user).ToList();

但这在操作上没有任何不同。

想法:

  • 你不应该在这里期待零场或一场比赛吗?不是多个?(FirstOrDefault / SingleOrDefault)
  • 我怎么说这个.. 停止存储密码。不完全是; 停下来。仅限盐渍哈希。

有关信息,返回 IQueryable 时它不起作用的原因是查询是“延迟的” - 它尚未执行。如果您在迭代查询(foreach、ToList 等)之前处理数据上下文(“使用”),则查询无法工作。这就像从水龙头上取下软管,然后走到“业务端”,打开喷嘴,想知道为什么没有水。

于 2013-05-25T09:16:57.163 回答