为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
HUWWW 2021-11-21 18:07:02
我是 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();}
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

您的异常具有在这里解释问题的重要细节:


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


要使用对象初始值设定项语法将值放入PartenaireMapItem对象中,您可以.AsEnumerable()在.Where(...). 使用 AsEnumerable() 将允许您使用 LINQ to Objects 功能。


return db.Partenaires

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

            .AsEnumerable()

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


查看完整回答
反对 回复 2021-11-21
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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

请记住,您的类中可以有多个构造函数。


查看完整回答
反对 回复 2021-11-21
?
梦里花落0921

TA贡献1772条经验 获得超5个赞

例外是因为这里

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

您正在使用List<T>IEnumerable<T> 参数的构造函数,并且如异常消息所示,LINQ to Entities 仅允许无参数构造函数,即没有参数的构造函数。

只需将其替换ToList为可识别的扩展方法,因此 EF 查询转换器支持:

Prestations = p.PartenairePrestations.Select(y => y.Prestation.NomPrestation).ToList()


查看完整回答
反对 回复 2021-11-21
  • 3 回答
  • 0 关注
  • 306 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信