如何使用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
});
我希望有人知道如何从开始时间中列出唯一的日期列表。我还没有找到任何关于它的信息,我觉得我的头撞到了墙上。
不要使用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");