如何使用C#在ASPMVC的下拉列表中创建一个唯一的日期列表

本文关键字:一个 列表 日期 唯一 创建 何使用 ASPMVC 下拉列表 | 更新日期: 2023-09-27 18:06:40

我正在使用ASPMVC中的Entity框架,我想从具有日期时间字段的数据库中提取一个唯一日期列表,并将其显示在下拉列表中。我找不到格式化输出的方法,只能按顺序列出唯一的日期,这样页面上的任何人都会看到类似"8/7/2015"、"8/8/2015"而不是"8/7/201511:00:00 AM"answers"8/7/2201511:25:00 AM"的内容。。。对于CCD_ 1。

这是我迄今为止的型号

public class Appointment
{
    [Key]
    [Column("apt_Id")]
    [Display(Name = "Appointment Id")]
    public int AppointmentId { get; set; }
    [Column("apt_apl_Id")]
    public int AppealId { get; set; }
    public virtual Appeal Appeal { get; set; }
    [Column("apt_ofh_Id")]
    public int OfficeHoursId { get; set; }
    public virtual OfficeHours OfficeHours { get; set; }
    [Column("apt_StartDateTime")]
    public DateTime AppointmentStartDateTime { get; set; }
    [Column("apt_EndDateTime")]
    public DateTime AppointmentEndDateTime { get; set; }
}

我被卡在控制器中,代码如下:

SelectList AppointmentDateSelectList = new SelectList(
    db.Appointment.Where(g => g.AppointmentStartDateTime > DateTime.Now),
    "AppointmentStartDateTime","AppointmentStartDateTime")
    .Select(a => new SelectListItem
    {
        Text = Convert.ToDateTime(a.Text).ToShortDateString(),
        Value = a.Value
    });

我希望有人知道如何从开始时间中列出唯一的日期列表。我还没有找到任何关于它的信息,我觉得我的头撞到了墙上。

如何使用C#在ASPMVC的下拉列表中创建一个唯一的日期列表

不要使用ToShortDateString(),而是使用ToString("MM/dd/yyyy")或任何其他您想要的格式。

注:这是一个评论,但我没有足够的声誉。

首先,有点偏离主题,但我鼓励您使用良好的格式。你会惊讶于奇怪的格式经常会让一段代码看起来比实际更复杂。出于这个原因,为了可读性,我还将数据库位分解为一个单独的变量。

var matchingAppointments = db.Appointment.Where(g => g.AppointmentStartDateTime > DateTime.Now);

其次,我认为对数据库部分而不是SelectList本身进行排序和区分更有意义:

// Renamed variable
var distinctAppointmentDates = db.Appointment.Where(appt => appt.AppointmentStartDateTime > DateTime.Now)
                                             .OrderBy(appt => appt.AppointmentStartDateTime)
                                             .ToList()  // Force query execution
                                             .Select(appt => appt.AppointmentStartDateTime.ToShortDateString())
                                             .Distinct();
SelectList AppointmentDateSelectList = new SelectList(distinctAppointmentDates);

最后,就我所见,你对ToShortDateString的使用还不错。我不知道为什么其他人会认为这是问题所在。

尝试创建一个selectlist项目列表,然后将该列表放入selectlist

var list = db.Appointment.Where(g => g.AppointmentStartDateTime > DateTime.Now)
                         .select(s => new SelectListItem{
                                     Text = s.AppointmentStartDateTime.ToString("dd/mm/yy"), 
                                     Value = a.AppintmentStartDateTime   
                         });
var AppointmentDateSelectList  = new SelectList(list, "Text","Value");

要选择唯一日期,可以在linq查询中使用GroupBy()ToString()还将帮助您设置日期格式。

var list = db.Appointment.Where(g => g.AppointmentStartDateTime >DateTime.Now).GroupBy(x=>x.AppointmentStartDateTime)
    .select(s => new SelectListItem
    {
         Text = s.Key.Value.ToString("dd/mm/yy"), 
         Value = s.Key.Value.ToString()
    });
var AppointmentDateSelectList  = new SelectList(list, "Text","Value");