开发者

Convert Loop To Linq - Model Creation

I'm converting an entity object to a model that can be p开发者_JS百科assed around my application without the extra overhead (As well as generating a couple of extra fields for the view etc.

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

Can this be converted to a Linq Query, the below does work I get the error

Server Error in '/' Application. Only parameterless constructors and initializers are supported in LINQ to Entities.

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

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

        return RetO;
    }

Resharper actually converts the firt loop into this, which also fails with the same error.

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


Thats because entity framework is trying to convert optimize your projection expression into sql.

The easy fix is to enumerate the results before the projection:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜