C# 尝试遍历Queryable时出错
将抛出C# 尝试遍历Queryable时出错,c#,linq,entity-framework,entity-framework-6,iqueryable,C#,Linq,Entity Framework,Entity Framework 6,Iqueryable,将抛出已经有一个与此命令关联的打开的DataReader,必须先关闭。异常,但在添加.ToList()时不会发生 到目前为止,我已经到处寻找,但还没有找到满意的答案。所以我的问题是: 除了添加.ToList(),还有其他方法可以做到这一点吗 如果使用.ToList()作为解决方案,在投入生产时是否会导致性能问题?因为AFAIKToList()将尝试加载内存中的所有内容 我的实体中有很多导航属性,请问ToList()是否尝试加载导航属性中的所有内容 谢谢 除了添加.ToList()之外,还有其他方
已经有一个与此命令关联的打开的DataReader,必须先关闭。
异常,但在添加.ToList()
时不会发生
到目前为止,我已经到处寻找,但还没有找到满意的答案。所以我的问题是:
.ToList()
,还有其他方法可以做到这一点吗.ToList()
作为解决方案,在投入生产时是否会导致性能问题?因为AFAIKToList()
将尝试加载内存中的所有内容ToList()
是否尝试加载导航属性中的所有内容ToList()
的一种替代方法
如果使用.ToList()作为解决方案,在投入生产时是否会导致性能问题
这取决于数据库中不同用户名的数量
因为AFAIK ToList()将尝试加载内存中的所有内容
它将尝试在内存中加载所有不同的用户名
我的实体中有很多导航属性,ToList()会尝试加载导航属性中的所有内容吗
否,它将执行适当的查询并在用户名列上进行投影
嗯,这是一个很好的实践
除了添加.ToList()之外,还有其他方法吗
我猜在您的连接中,字符串可能是ToList()
的一种替代方法
如果使用.ToList()作为解决方案,在投入生产时是否会导致性能问题
这取决于数据库中不同用户名的数量
因为AFAIK ToList()将尝试加载内存中的所有内容
它将尝试在内存中加载所有不同的用户名
我的实体中有很多导航属性,ToList()会尝试加载导航属性中的所有内容吗
否,它将执行适当的查询并在用户名列上进行投影
嗯,好的做法是什么是客户?当你使用foreach时,为什么还要费心做一个
ToList()
(这样你就可以枚举你所有的用户名了?\u cust是一个DbSet
。没有。ToList()
,它将引发异常已经有一个与此命令相关联的打开的DataReader,必须首先关闭。
请参见此1。我认为错误发生在计算_cust时。在这一上下文中,执行时间似乎很重要(这一行中的toList->after execution vs foreach()->)2.toList()将枚举查询,foreach也会枚举。3.这取决于您的查询,意思是:上下文打开了多长时间?是否包含任何内容?是否使用AsNoTracking()?您所说的“计算_cust”是什么意思?什么是_cust?它背后是什么查询?正如您所知,任何查询都只会在需要值时执行,这意味着您必须计算值,因为您使用的是ToList()、foreach()、First()或其他任何东西。什么是_cust?当您使用foreach时,为什么要费心制作一个ToList()
(那么您是否枚举了所有用户名
s?\u cust是一个DbSet
。没有。ToList()
,它将引发异常已经有一个与此命令相关联的打开的DataReader,必须首先关闭。
请参见此1。我认为错误发生在计算_cust时。在这一上下文中,执行时间似乎很重要(这一行中的toList->after execution vs foreach()->)2.toList()将枚举查询,foreach也会枚举。3.这取决于您的查询,意思是:上下文打开了多长时间?是否包含任何内容?是否使用AsNoTracking()?您所说的“计算_cust”是什么意思?什么是_cust?它后面是什么查询?正如您所知,任何查询都只会在需要值时执行,这意味着您必须计算该值,因为您使用的是ToList()、foreach()、First()或其他。
foreach(var name in _cust.Select(s => s.Username).Distinct())
{
var x = _cust.Select(s => s.Username == name); //ERROR HERE
//rest of the code here
}