簡體   English   中英

Linq:如何在 IQueryable.Net6 中按日期字符串值排序?

[英]Linq : How to sorting by date strine values in IQueryable .Net6?

我有一個存儲用戶的表,我想按日期顯示它們,日期存儲為字符串。

Linq:

IQueryable<User> result = _context.Users
    .AsQueryable()
    .Include(r => r.Role)
    .Include(u => u.UserDetail)
    .Where(u => u.Role.RoleName != "Admin")
    .OrderByDescending(u => DateTime.Parse(u.UserDetail.RegisterDate));

我用了上面的代碼但是沒有顯示排序,?! 我也檢查了以下鏈接,但我的問題沒有解決? 按 LINQ 中的字符串值對 IQueryable 日期列進行排序

您可以嘗試使用 TryParse,這是一種比“ParseExact”更寬容的方法

if (DateTime.TryParse(result.UserDetail.RegisterDate, out registerDate))
{
    result = result.OrderByDescending(u => registerDate);
}

或者,您可以像這樣使用 ParseExact;

try
{
    result = result.OrderByDescending(u => 
        DateTime.ParseExact(u.UserDetail.RegisterDate, "yyyy-MM-dd", 
        CultureInfo.InvariantCulture));
}
catch (Exception ex)
{
    
}

請記住,ParseExact 非常嚴格,如果您沒有提供完全正確的輸入,則可能會拋出 FormatException。 我建議將來盡可能將列的類型更改為 DateTime 而不是 String,因為這將使應用程序更易於維護,並且這樣排序會更快。

要應用任何一種技術,只需像這樣在末尾沒有“OrderByDescending”的情況下做你正在做的事情;

IQueryable<User> result = _context.Users.AsQueryable().Include(r=> 
    r.Role).Include(u => u.UserDetail).Where(u=> u.Role.RoleName != 
    "Admin");

然后應用任何一種技術。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM