解决方案 »

  1.   

    可以存放到ViewData[Name]  
    页面用ViewData[name] as 你的类别  来获取
      

  2.   

    context.ItemTimes
                                          .Where(a => a.ItemInfo.ItemId == 1)
                                          .TakeWhile(a => a.Time > System.DateTime.Now).toList();
                                      
      

  3.   


    具体方法我已经自己测试出来了  主要是ViewModel里,应该都是IEnumerable<Item> 然后在Controller里,不应该带First和TakeWhile, 只能在View层里进行选取
      

  4.   

    跨程序层不要使用 IQueryable<ItemTime>,应该声明为 ItemTime[] 或者 List<ItemTime>。实际上,如果你制定跨平台的基本接口,你连 List<T> 都不应该滥用,而应该使用通用的 T[]类型,这样才能保证可靠性。不是什么程序都以“省事儿”为原则的,要了解不能做什么,否则就应该使用规范的做法。
      

  5.   


    具体方法我已经自己测试出来了  主要是ViewModel里,应该都是IEnumerable<Item> 然后在Controller里,不应该带First和TakeWhile, 只能在View层里进行选取Controller 里本来就是用来进行 First、Take、Where 之类运算的地方。View本来就不应该再写任何计算代码。应该在Controller就产生完毕所有需要绑定到View的数据实例,而不是到View才去开始查询。
      

  6.   

    解决办法如3楼和4楼所说,你需要用ToList把数据从数据库中取出保存在内存中,不加ToList()的话,在你调用数据时它才试图连接数据库获取数据,而这时DbContext已释放,相应的数据库连接已经关闭了,无法执行数据库操作,所以会出现这样的错误
      

  7.   

    还有一个解决方法,你把DbContext的实例作为Controller类的一个字段,另外你的ViewModel中最好使用IEnumerable<T>来表示对象集合
      

  8.   


    具体方法我已经自己测试出来了  主要是ViewModel里,应该都是IEnumerable<Item> 然后在Controller里,不应该带First和TakeWhile, 只能在View层里进行选取Controller 里本来就是用来进行 First、Take、Where 之类运算的地方。View本来就不应该再写任何计算代码。应该在Controller就产生完毕所有需要绑定到View的数据实例,而不是到View才去开始查询。突然感觉您说的特别有道理啊,那这样子看来我的代码要全部修改了啊