使用Linq从其他表中获取特定信息

时间:2017-08-07 08:25:32

标签: c# sql entity-framework linq code-first

我的数据库首先使用代码创建。这是我的客户的模型。

    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; }

我还有一个模特访问:

    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; }

每个客户都有多次访问。 我怎样才能获得最后一次访问并将其添加到我的模型中?

这是我想要改进的resquest linq。

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

我希望在客户端提供信息DaySinceLastVisit。 我认为我们需要进行最后一次访问并进行计算以获得自此次访问以来已经过去的日子?

1 个答案:

答案 0 :(得分:0)

首先:

如果客户有多个访问次数,最好添加

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

到您的客户实体,以便您可以轻松访问链接到客户端的所有访问。

然后使用类似的代码计算“DaySinceLastVisit”很容易:

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