27 messaggi dal 17 maggio 2011
Ciao,

nel mio progetto ho la necessità di visualizzazione i dati contenuti in diverse tabelle.
Queste sono le due entity dal quale estrapolare i dati:

public class CRM : BaseEntity
    {
        [Required]
        public CRMType? Type { get; set; }

        [Required]
        public long StatusId { get; set; }

        public virtual Status Status { get; set; }

        [Column(TypeName = "ntext")]
        public string Note { get; set; }

        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime CreationDate { get; set; }

        public int? Duration { get; set; }

        [Required]
        public long CustomerId { get; set; }

        public virtual Customer Customer { get; set; }
}


public class CRMToDo : BaseEntity
    {
        [Required]
        public CRMType? Type { get; set; }
        
        [Column(TypeName = "ntext")]
        public string Note { get; set; }

        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime CreationDate { get; set; }

        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime ChosenDate { get; set; }

        [Required]
        public long CustomerId { get; set; }

        public virtual Customer Customer { get; set; }
    }


Ho creato quindi questo model da utilizzare nella view:

public class CRMViewModel
    {
        public CRM Crm { get; set; }
        public DateTime ChosenDate { get; set; }
        public Status LastStatus { get; set; }
    }


Tramite questa istruzione vorrei estrapolare i dati ed inserirli in CRMViewModel ma ci sono degli errori che non riesco a risolvere:

var crms= db.CRM.Join(db.CRMToDo,
                    c => c.CustomerId,
                    ctd => ctd.CustomerId,
                    (c, ctd) => new { CRM = c, CRMToDo = ctd })
                .Select(c => new CRMViewModel
                {
                    Crm = c,
                    ChosenDate = ctd.ChosenDate,
                    LastStatus = c.LastStatus
                });


Riuscite ad aiutarmi?

Grazie
Ciao
Enrico
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Enrico,
riporta nel dettaglio gli errori che stai ricevendo.

Non puoi usare le proprietà di navigazione anziché usare una Join?
Per iniziare, vedi se questo ti aiuta:
https://coding.abel.nu/2012/06/dont-use-linqs-join-navigate/

ciao,
Moreno

Enjoy learning and just keep making
27 messaggi dal 17 maggio 2011
Non potevo usare le navigation properties perchè non sono contenute nella entity che estraggo.
Alla fine ho utilizzato la entity CRMToDo in cui ho aggiunto un metodo statico in cui estraggo l'ultimo status.

public Status LastCRMStatus
        {
            get
            {
                var crmList = new ApplicationDbContext().CRM.Where(c => c.CustomerId.Equals(this.Customer.Id)).OrderByDescending(c => c.CreationDate);
                if (crmList != null && crmList.Count() > 0)
                    return crmList.First().Status;
                return null;
            }
        }


Grazie
Ciao
Enrico
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Enrico,
ok, ricordati che è importante fare il Dispose dell'ApplicationDbContext, altrimenti la connessione resterà aperta e questo potrebbe essere un problema nel momento in cui i tuoi utenti aumenteranno (la pagina andrà in errore perché non ci sono più connessioni disponibili nel pool da usare).

In questo esempio invoco il Dispose implicitamente, dato che ho avvolto l'ApplicationDbContext in un blocco using. Questo mi assicurerà che il Dispose verrà invocato sempre, anche se le istruzioni che ho messo all'interno del blocco using dovessero produrre un'eccezione. E' per assicurarmi che la connessione (e le risorse annesse) vengano liberate propriamente.

public Status LastCRMStatus
{
  get
  {
    using (var context = new ApplicationDbContext()) {
      var crmList = context.CRM.Where(c => c.CustomerId.Equals(this.Customer.Id)).OrderByDescending(c => c.CreationDate);
      if (crmList != null && crmList.Count() > 0)
        return crmList.First().Status;
      return null;
    }
  }
}


ciao,
Moreno
Modificato da BrightSoul il 01 luglio 2017 12.14 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.