我正在尝试从结果可能超过一行的数据库中获取一些数据。
我有以下代码:
public System.Linq.IQueryable<Users> getUser2(string idUser)
{
try
{
using (Entities c = new Entities())
{
c.ContextOptions.LazyLoadingEnabled = false;
c.ContextOptions.ProxyCreationEnabled = false;
return c.Users.Include("Empresas").Where(x => x.Login == idUser && x.Empresas.Activa == true);
}
}
catch (Exception ex)
{
throw ex;
}
}
但它似乎没有得到任何结果,它显示的东西就像一个形状错误的Iqueryable,我的意思是如果我展开它的结果视图我可以看到一条消息说“ObjectContext实例已被删除,不能用于操作需要连接“如果我尝试使用函数ElementAt(索引)访问任何Users元素,我会得到一个IndexOutOfBounds错误,因为如果在调试模式下观察它看起来没有数据。
我推断出它是故障,因为这段代码在返回它找到满足条件的第一个用户时工作正常:
public Users getUser(string idUser)
{
try
{
using (Entities c = new Entities())
{
c.ContextOptions.LazyLoadingEnabled = false;
c.ContextOptions.ProxyCreationEnabled = false;
return c.Users.Include("Empresas").FirstOrDefault(x => x.Login == idUser && x.Empresas.Activa == true);
}
}
catch (Exception ex)
{
throw ex;
}
}
那里的工作方式与我认为应该的方式不同吗?如果那时,我怎样才能得到几个满足条件的数据?我在getUser中传递相同的条件但是有几行?
感谢您的关注。
答案 0 :(得分:0)
你需要枚举结果,所以在&#34;其中&#34;声明补充。 ToList()将枚举并执行对您的数据库的查询。 FirstOrDefault正在执行查询,这就是您获得结果的原因。
您需要检查延迟方法并了解它们的工作原理。
修改强> 以下是一些链接,向您展示延迟方法与LINQ中的Immediate方法之间的差异
1- http://www.dotnetcurry.com/showarticle.aspx?ID=750
2- http://www.codeproject.com/Articles/627081/LINQ-Deferred-Execution-Lazy-Evaluation
3- http://visualcsharptutorials.com/linq/deferred-execution
希望有所帮助。