c# - 必须首先关闭 DataReader 和我的 LINQ 查询

标签 c# linq

我正在尝试使用 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/

相关文章:

c# - 丢弃算子的性能优势

c# - 使用 LINQ 将一个对象属性列表更新为其他列表

c# - 如何使用linq查询对象的子对象

c# - 继承相等比较器

c# - 测试模拟对象构造函数

c# - 如何检查列表包含 Linq to sql 中的多个值

c# - 关于 throw 和 assert 的困惑

c# - 从 LINQ 查询中获取最前面的条目

c# - 找到关键元素后如何从列表中获取下一个元素

c# - 使用 map 坐标确定点是否在矩形中