繁体   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