猿问

ASP.NET - 实体框架 - LINQ to Entities 中仅支持无参数构造函

我是 asp.net MVC4 和 EntityFramework 的新手。


尝试向 API 添加新方法时出现此错误:


LINQ to Entities 仅支持无参数构造函数和初始值设定项。


这是我的方法:


// GET: api/Partenaires_prestations

        [Authorize]

        [Route("api/Partenaires_prestations")]

        public List<PartenaireMapItem> GetPartenairesWithPrestations()

        {

            Random rnd = new Random();


            var queryString = Request.GetQueryNameValuePairs();


            var prestation = queryString.FirstOrDefault();


            return db.Partenaires

                .Where(p => p.PartenairePrestations.Any(pp => pp.Prestation.NomPrestation == prestation.Value))

                .Select(p => new PartenaireMapItem {

                    IdPartenaire = p.IdPartenaire,

                    FirstName = p.FirstName,

                    LastName = p.LastName,

                    NomComplet = p.LastName.Substring(0,1).ToUpper() + ". " + p.FirstName,

                    Type = p.Type,

                    DureeMin = 50,

                    Lat = p.Lat,

                    Lng = p.Lng,

                    ImageUrl = p.ImageUrl,

                    SeDeplace = p.SeDeplace,

                    ADomicile = p.ADomicile,


                    NoteGlobale = p.NoteClientPartenaires.Sum(x => ((double)(x.NoteAimabilite + x.NotePonctualite +

                                             x.NoteProprete + x.NoteQualite)) / 4) / p.NoteClientPartenaires.Count,

                    Prestations = new List<string>(p.PartenairePrestations.Select(y => y.Prestation.NomPrestation))

                }).ToList();

}


HUWWW
浏览 327回答 3
3回答

慕码人8056858

您的异常具有在这里解释问题的重要细节:LINQ to Entities 中仅支持无参数构造函数和初始值设定项。要使用对象初始值设定项语法将值放入PartenaireMapItem对象中,您可以.AsEnumerable()在.Where(...). 使用 AsEnumerable() 将允许您使用 LINQ to Objects 功能。return db.Partenaires&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Where(p => p.PartenairePrestations.Any(pp => pp.Prestation.NomPrestation == prestation.Value))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .AsEnumerable()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Select(p => new PartenaireMapItem {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IdPartenaire = p.IdPartenaire,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FirstName = p.FirstName,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LastName = p.LastName,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NomComplet = p.LastName.Substring(0,1).ToUpper() + ". " + p.FirstName,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Type = p.Type,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DureeMin = 50,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Lat = p.Lat,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Lng = p.Lng,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ImageUrl = p.ImageUrl,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SeDeplace = p.SeDeplace,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ADomicile = p.ADomicile,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NoteGlobale = p.NoteClientPartenaires.Sum(x => ((double)(x.NoteAimabilite + x.NotePonctualite +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;x.NoteProprete + x.NoteQualite)) / 4) / p.NoteClientPartenaires.Count,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Prestations = new List<string>(p.PartenairePrestations.Select(y => y.Prestation.NomPrestation))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }).ToList();

犯罪嫌疑人X

实体框架为您实例化对象。为了能够这样做,它希望您的类中有一个没有参数的构造函数。检查您的类是否具有这样的构造函数(我没有看到)。请记住,您的类中可以有多个构造函数。

梦里花落0921

例外是因为这里Prestations&nbsp;=&nbsp;new&nbsp;List<string>(p.PartenairePrestations.Select(y&nbsp;=>&nbsp;y.Prestation.NomPrestation))您正在使用List<T>带IEnumerable<T>&nbsp;参数的构造函数,并且如异常消息所示,LINQ to Entities 仅允许无参数构造函数,即没有参数的构造函数。只需将其替换ToList为可识别的扩展方法,因此 EF 查询转换器支持:Prestations&nbsp;=&nbsp;p.PartenairePrestations.Select(y&nbsp;=>&nbsp;y.Prestation.NomPrestation).ToList()
随时随地看视频慕课网APP
我要回答