[英]ASP.NET Core 6.0 MVC - Sort a string with range of date
我想我正在接近我想要的,但我認為我可以使用一些幫助。
我發現如果我做order.by(x => x.Datum)
日期會被排序,盡管到目前為止它是一個格式為yyyy/MM/dd
的字符串,所以現在我決定將字符串擴展到一個日期范圍,像這樣: dd/MM/yyyy-dd/mm/yyyy
。
根據我的理解,我還可以使用DateTime.ParseExact
將字符串轉換為日期時間對象,但會出現以下錯誤:
FormatException:DateTime 模式“d”以不同的值出現多次
不能將日期范圍存儲在datetime
時間對象中嗎?
public IActionResult Termin() //Diese Methode zeigt die Termine an.
{
var termin = _context.Termin
.Select(x => new ViewModelExposeTermin
{
Id = x.Id,
Name = x.Name,
Ort = x.Ort,
Datum = x.Datum,
Uhrzeit = x.Uhrzeit
})
.ToList()
.OrderBy(x => DateTime.ParseExact(x.Datum, "dd/MM/yyyy-dd/MM/yyyy", CultureInfo.CurrentCulture));
return View(termin);
}
我不確定 sql 是否具有類似類型的數據范圍,而是可以使用 2 個日期時間字段。
public class TerminDatabaseModel
{
/*
* Some other properties
*/
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
然后您可以創建自己的自定義DateTimeRange
值類型,它應該實現IComparer<DateTimeRange>
以便在 Linq 的OrderBy
中使用。
public readonly struct DateTimeRange : IComparer<DateTimeRange>
{
public DateTimeRange(DateTime start, DateTime end)
{
Start = start;
End = end;
}
public DateTime Start { get; }
public DateTime End { get; }
public TimeSpan Duration => Start - End;
// comparing implementation
public int Compare(DateTimeRange x, DateTimeRange y)
{
return x.Duration.CompareTo(y.Duration);
}
/*
* Other stuff
*/
}
並將其添加到您的 ViewModel
public class ViewModelExposeTermin
{
/*
* Some other properties
*/
public DateTimeRange Datum { get; init; }
}
最后,將DateTime
字段映射到DateTimeRange
字段
var termin = _context.Termin
.Select(x => new ViewModelExposeTermin
{
Id = x.Id,
Name = x.Name,
Ort = x.Ort,
Datum = new DateTimeRange(x.StartDateTime, x.EndDateTime),
Uhrzeit = x.Uhrzeit
})
.ToList()
.OrderBy(x => x.Datum);
return View(termin);
在從數據庫中檢索數據之后進行排序。 要在查詢中執行排序,您必須在使用ToList
獲取之前使用 EF 的OrderBy
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.