【问题标题】:Enumeration yielded no result?枚举没有结果?
【发布时间】:2013-07-12 15:16:00
【问题描述】:

我正在尝试使用 linq to enitites 过滤一些对象,但我收到一条错误消息,告诉我“枚举未产生任何结果”。

在客户端我收到这样的消息:

操作无法完成,因为 DbContext 已被 处置

我知道这些过滤器值应该返回一些结果,但它不起作用,所以我猜我的查询是错误的,请你帮忙。

var mediaChannels =
NeptuneUnitOfWork.MediaChannels
          .FindWhere(m => m.CountryID == CountryID && 
                          m.SonarMediaTypeID == MediaTypeID &&
                          m.SonarMediaTypes.SonarMediaGroupID == MediaGroupID &&
                          m.Name.Contains(search))
          .Select(m => new MediaChannelModel() {
                 ID = m.ID,
                 Name = m.Name,
                 MediaType = m.MediaType.Name,
                 Country = m.Countries.Name,
                 SubRegion = m.Countries.Lookup_SubRegions.Name,
                 Region = m.Countries.Lookup_SubRegions.Lookup_Regions.Name
      });

【问题讨论】:

  • NeptuneUnitOfWork.MediaChannels 是否启动并运行?
  • 谢谢大家,我必须添加一个 ToList() 并且我的 sql 测试是错误的,所以没有匹配的数据。
  • 添加 ToList() 就可以了

标签: linq entity-framework-4


【解决方案1】:

我的猜测是它运行得很好,然后你处理你的上下文,然后你尝试访问mediaChannels。问题是 Linq 使用延迟执行。因此,在您枚举mediaChannels 之前,您的查询不会真正执行,这是在您处理上下文之后。

如果您不想使用延迟执行,请在查询末尾添加 .ToList() 以强制在此处加载。

如果您想使用延迟执行,那么您不能在稍后处理您的上下文。

【讨论】:

    【解决方案2】:

    The operation cannot be completed because the DbContext has been disposed 经常出现在您向客户端发送数据而不将数据保存到内存时。这可以通过.ToList()-ing 您的查询在发送到页面之前轻松解决

    var mediaChannels = NeptuneUnitOfWork.MediaChannels
                        .Where(m => m.CountryID == CountryID
                                 && m.SonarMediaTypeID == MediaTypeID &&
                                 && m.SonarMediaTypes.SonarMediaGroupID == MediaGroupID
                                 && m.Name.Contains(search))
                        .Select(m => new MediaChannelModel() {
                                             ID = m.ID,
                                             Name = m.Name,
                                             MediaType = m.MediaType.Name,
                                             Country = m.Countries.Name,
                                             SubRegion = m.Countries.Lookup_SubRegions.Name,
                                             Region = m.Countries.Lookup_SubRegions.Lookup_Regions.Name
                         }).ToList(); // <<-- NOTE this additional method
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-06
      • 2018-08-09
      相关资源
      最近更新 更多