如何使用多对多关系的EntityFramework执行查询

本文关键字:EntityFramework 执行 查询 关系 何使用 | 更新日期: 2023-09-27 18:04:02

我在我的数据库中有一个多对多的关系,我有一个简单的c#项目,我使用EntityFramework来连接我的数据库。现在这些表是:

[dbo].[PE_Attivita](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Descrizione] [nvarchar](500) NULL,
    [IDAttivitaPare] [int] NULL,
    [CodiceCategoria] [int] NULL,
    [NomeAttivita] [nvarchar](100) NULL,
    [NomeFileEseguibile] [nvarchar](100) NULL,
    [isVisible] [bit] NULL
)
[dbo].[ANAG_OperatoriMedici](
    [CodicePersoneFisiche] [nvarchar](16) NOT NULL,
    [Descrizione] [nvarchar](100) NULL
)
[dbo].[PE_AttivitaXMedico](
    [CodiceFiscaleOperatoreMedico] [nvarchar](16) NOT NULL,
    [IDAttivita] [int] NOT NULL
)

现在我想执行一个查询来从pe_activitaxmedico中提取所有数据。

如果我试图在我的工作空间中搜索pe_activitaxmedico类,我无法搜索它。我试着写这段代码,但不工作:

activityForDoctors= from ad in db_data.PE_Attivita
    select new ActivityDTO.activitysXDoctors
    {
        IdAttivita=ad.ID,
        codiceFiscaleDottore=ad.ANAG_OperatoreMedico.
    }

因为在pe_ativita的ANAG_OperatoreMedico是一个集合,而不是一个对象,我怎么能修复它?

编辑

这是我的pe_active模型

public partial class PE_Attivita
    {
        public PE_Attivita()
        {
            this.MONITOR_Dati_Attivita_Esecuzione = new HashSet<MONITOR_Dati_Attivita_Esecuzione>();
            this.PE_Schedulazione_Attivita = new HashSet<PE_Schedulazione_Attivita>();
            this.PE_Attivita1 = new HashSet<PE_Attivita>();
            this.PE_AttivitaXIndici = new HashSet<PE_AttivitaXIndici>();
            this.PE_AttivitaXParametri = new HashSet<PE_AttivitaXParametri>();
            this.ANAG_OperatoriMedici = new HashSet<ANAG_OperatoriMedici>();
        }
        public int ID { get; set; }
        public string Descrizione { get; set; }
        public Nullable<int> IDAttivitaPare { get; set; }
        public Nullable<int> CodiceCategoria { get; set; }
        public int CreationUserID { get; set; }
        public int LastChangeUserID { get; set; }
        public System.DateTime CreationDate { get; set; }
        public System.DateTime LastChangeDate { get; set; }
        public int FileStateID { get; set; }
        public string NomeAttivita { get; set; }
        public string NomeFileEseguibile { get; set; }
        public Nullable<bool> isVisible { get; set; }
        public virtual ICollection<MONITOR_Dati_Attivita_Esecuzione> MONITOR_Dati_Attivita_Esecuzione { get; set; }
        public virtual ICollection<PE_Schedulazione_Attivita> PE_Schedulazione_Attivita { get; set; }
        public virtual ICollection<PE_Attivita> PE_Attivita1 { get; set; }
        public virtual PE_Attivita PE_Attivita2 { get; set; }
        public virtual PE_CategoriaAttivita PE_CategoriaAttivita { get; set; }
        public virtual ICollection<PE_AttivitaXIndici> PE_AttivitaXIndici { get; set; }
        public virtual ICollection<PE_AttivitaXParametri> PE_AttivitaXParametri { get; set; }
        public virtual ICollection<ANAG_OperatoriMedici> ANAG_OperatoriMedici { get; set; }
    }

这是ANAG_OperatoriMedici模型

public partial class ANAG_OperatoriMedici
    {
        public ANAG_OperatoriMedici()
        {
            this.ANAG_OperatoriMediciXAssistiti = new HashSet<ANAG_OperatoriMediciXAssistiti>();
            this.PE_Schedulazione_Attivita = new HashSet<PE_Schedulazione_Attivita>();
            this.ANAG_Associazioni = new HashSet<ANAG_Associazioni>();
            this.PE_Attivita = new HashSet<PE_Attivita>();
        }
        public string CodicePersoneFisiche { get; set; }
        public string Descrizione { get; set; }
        public virtual ANAG_PersoneFisiche ANAG_PersoneFisiche { get; set; }
        public virtual ICollection<ANAG_OperatoriMediciXAssistiti> ANAG_OperatoriMediciXAssistiti { get; set; }
        public virtual ICollection<PE_Schedulazione_Attivita> PE_Schedulazione_Attivita { get; set; }
        public virtual ICollection<ANAG_Associazioni> ANAG_Associazioni { get; set; }
        public virtual ICollection<PE_Attivita> PE_Attivita { get; set; }
    }

如何使用多对多关系的EntityFramework执行查询

如果没有类,很难解释您的问题,但如果您只想从集合中获取1,请使用

codiceFiscaleDottore=ad.ANAG_OperatoreMedico.FirstOrDefault().CodiceFiscaleOperatoreMedico

如果你想要所有的组合,SelectMany()可以派上用场:

activityForDoctors = from ad in db_data.PE_Attivita
.SelectMany(c => c.ANAG_OperatoreMedico)
select ad
http://blogs.interknowlogy.com/2008/10/10/use-linqs-selectmany-method-to-flatten-collections/