将循环转换为Linq - 模型创建

时间:2011-01-21 14:22:49

标签: linq entity-framework

我正在将一个实体对象转换为一个模型,该模型可以在我的应用程序中传递而不需要额外的开销(以及为视图生成一些额外的字段等。

        public IEnumerable<PageModel> GetAllPages()
        {
            var AllPageO = _session.All<Page>();

            IList<PageModel> RetO = new List<PageModel>();

            foreach (var AP in AllPageO)
            {
                RetO.Add(new PageModel(AP));
            }

            return RetO.AsEnumerable();
        }

这可以转换为Linq查询,下面的工作我得到了错误

  '/'应用程序中的服务器错误。只要   无参数构造函数和   LINQ支持初始化程序   实体。

    public IEnumerable<PageModel> GetAllPages()
    {
        var AllPageO = _session.All<Page>();

        var RetO = from EntityO in AllPageO select new PageModel(EntityO);

        return RetO;
    }

Resharper实际上将firt循环转换为此循环,也会因同样的错误而失败。

IList<PageModel> RetO = PageO.Select(AP => new PageModel(AP)).ToList();

1 个答案:

答案 0 :(得分:3)

这是因为实体框架正在尝试将您的投影表达式转换为sql。

简单的解决方法是在投影前枚举结果:

 var RetO = from EntityO in AllPageO.ToList() select new PageModel(EntityO);