2017-08-07 7 views
0

Ma base de données est d'abord créée en utilisant le code. Voici le modèle pour mon client.Obtenir des informations spécifiques d'une autre table avec Linq

public int Id { get; set; } 

    [Required] 
    public string FirstName { get; set; } 

    [Display(Name = "Phone number")] 
    public int PhoneNumber { get; set; } 

    [Display(Name = "Email adress")] 
    [EmailAddress] 
    public string EmailAdress { get; set; } 

    [Display(Name = "Date of the wedding")] 
    public DateTime DateOfTheWedding { get; set; } 

    [Display(Name = "Type of client")] 
    public TypeOfClient TypeOfClient { get; set; } 

    [NotMapped] 
    public int DaySinceLastVisit { get; set; } 

J'ai aussi un modèle Visitez:

public int Id { get; set; } 

    public Client Client { get; set; } 

    [Required] 
    [ForeignKey("Client")] 
    public int ClientId { get; set; } 
    [Display(Name = "Date of the visit")] 
    public DateTime DateOfTheVisit { get; set; } 
    public String Comment { get; set; } 

Chaque client une visite multiple. Comment puis-je obtenir la dernière visite et l'ajouter à mon modèle?

Voici ma linq de demande que je veux améliorer.

 var clientsQueryable = _context.Clients 
      .Include(c => c.TypeOfClient); 

     if (!String.IsNullOrWhiteSpace(query)) 
      clientsQueryable.Where(client => client.FirstName.Contains(query)); 

     var listClients = clientsQueryable 
       .ToList() 
       .Select(Mapper.Map<Client, ClientDto>); 

     return Ok(listClients); 

Je veux avoir dans le client l'info DaySinceLastVisit. Je présume que nous devons obtenir la dernière visite et faire un calcul pour obtenir les jours qui se sont écoulés depuis cette visite?

Répondre

0

Tout d'abord:

Si un client a plusieurs visites, il serait bon d'ajouter un

public virtual ICollection<Visit> Visits { get; set; } 

à votre entité client, de sorte que vous pouvez facilement accéder à toutes les visites liées à un client .

Ensuite, il est facile de calculer la « DaySinceLastVisit » en utilisant un code similaire à ceci:

public int DaySinceLastVisit => (DateTime.Now - Visits.OrderByDescending(v => v.DateOfTheVisit).FirstOrDefault().DateOfTheVisit).Days; 
+1

Cette solution fonctionne, merci pour votre temps, j'ai appris nouvelle chose aujourd'hui, super! – ParkPark