2

Name我正在尝试使用 LINQ使用 EF 从我的数据库中选择一堆对象。问题是我收到一个错误:

已经有一个与此命令关联的打开的 DataReader,必须先关闭它。

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

1 回答 1

7

LINQ 查询不会获取数据,它只会创建一个可以获取数据的枚举,因此数据读取器是打开的,直到您获取最后一项。

使用ToList方法在使用它们之前将所有记录读入列表:

foreach (Name name in allNames.ToList())
于 2013-03-28T20:30:16.357 回答