我正在尝试使用 LINQ 使用 EF 从我的数据库中选择一堆 Name
对象。问题是我收到一个错误:
There is already an open DataReader associated with this Command which must be closed first.
Project
是包含有关该项目的信息的类型。它是名称类的导航属性。导致此错误的 LINQ 查询出了什么问题。
var allNames = from n in _db.DCENames
orderby n.BrandName ascending
select n;
foreach (Name name in allNames)
{
NameDbModel data = new NameDbModel();
data.id = name.Id;
data.BrandName = name.BrandName;
data.MarkType = name.Project.MarkType;
data.DateAdded = name.DateAdded;
data.PrimarySector = name.Project.PrimarySector;
data.ProjectName = name.Project.ProjectName;
data.Status = name.Project.ProjectStatus;
data.ProjectId = name.Project.ProjectId;
data.Notes = "";
model.Add(data);
}
最佳答案
LINQ 查询不会获取数据,它只会创建一个可以获取数据的枚举,因此数据读取器一直处于打开状态,直到您获取了最后一项。
在使用之前使用ToList
方法将所有记录读入列表:
foreach (Name name in allNames.ToList())
关于c# - 必须首先关闭 DataReader 和我的 LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15691510/