返回多个联接/导航对象

时间:2018-08-07 16:04:11

标签: c# asp.net-mvc visual-studio entity-framework

我最近继承了一个ASP.NET实体框架API项目。

我设法进行了必要的基本更改,但由于高级SQL请求而变得有些迷茫(我更是一个Symfony开发人员,我不知道实体框架)。

我需要在我的API中添加一个GET方法,该方法将接受服务(预备站),并返回所有具有与GET参数相同名称的服务(预备站)的合作伙伴(伙伴)的列表。 / p>

这是该方法的实际原型:

// GET: api/Partenaires_prestations
[Authorize]
public List<PartenaireMapItem> GetPartenairesWithPrestations(string prestation = "")
{    
    if (string.IsNullOrWhiteSpace(prestation))
    {
        prestation = "";
    }

    return db.Partenaires
                .Join() // Here I don't know what to do
}

我必须使用3个表:

Prestation, Partenaires, PartenairesPrestation 

这是3个表类:

namespace Uphair.EfModel
{
    using System;
    using System.Collections.Generic;

    public partial class Partenaire
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Partenaire()
        {
            this.PartenairePrestations = new HashSet<PartenairePrestation>(); // I took out the useless parts
        }

        public int IdPartenaire { get; set; }
        [...] // I took out properties that are not needed

        public virtual ICollection<PartenairePrestation> PartenairePrestations { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
}

namespace Uphair.EfModel
{
    using System;
    using System.Collections.Generic;

    public partial class PartenairePrestation
    {
        public int IdPartenaire { get; set; }
        public int IdPrestation { get; set; }
        public double Prix { get; set; }
        public int Duree { get; set; }
        public Nullable<System.DateTime> DateAjout { get; set; }

        public virtual Partenaire Partenaire { get; set; }
        public virtual Prestation Prestation { get; set; }
    }
}

namespace Uphair.EfModel
{
    using System;
    using System.Collections.Generic;

    public partial class Prestation
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Prestation()
        {
            this.PartenairePrestations = new HashSet<PartenairePrestation>();
            this.PrixDureeOptions = new HashSet<PrixDureeOption>();
            this.LigneReservations = new HashSet<LigneReservation>();
        }

        public int IdPrestation { get; set; }
        public string NomPrestation { get; set; }
        public int Categorie { get; set; }
        public Nullable<int> CoifEsthe { get; set; }
        public Nullable<int> IdPrestationCategorie { get; set; }

        public virtual ICollection<PartenairePrestation> PartenairePrestations { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
}

最后一个通过PartenairesPrestation列在IdPartenaireIdPrestation之间建立链接。

这是我的模型结构的屏幕截图:

https://imageshack.com/a/img922/9111/4twiC8.png(对不起,imgur没有回应)

这是PartenaireMapItem模型:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Uphair.EfModel;

namespace Uphair.Api.Models.Partenaire
{
    public class PartenaireMapItem
    {
        public int IdPartenaire { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string NomComplet { get; set; }
        public double? Lat { get; set; }
        public double? Lng { get; set; }
        public PartenaireType Type { get; set; }

        public int DureeMin { get; set; }

        public string ImageUrl { get; set; }

        public int SeDeplace { get; set; }

        public bool ADomicile { get; set; }

        public double NoteGlobale { get; set; }


        public List<String> Prestations { get; set; } 
    }
}

我需要使用join来获取具有服务(Partenaires)且具有Prestation参数中提供的服务名称的合作伙伴(GET)的列表,但是我没有不知道该怎么做。

感谢任何愿意花时间阅读/回答我的人,我们将提供任何帮助。

0 个答案:

没有答案