在C#中按日期时间的日期排序
本文关键字:日期 时间 排序 | 更新日期: 2023-09-27 18:28:54
我有一个web应用程序,它在GridView中显示当前月份的员工生日。
生日存储在SQL Server 2008数据库中,它们存储为完整的日期时间,即YYYY-MM-DD HH:MM:SS.000。
查询是在视图中完成的。我想按月份的日期对它们进行排序示例:
John Smith Mar 1
Sally Smith Mar 5
Benny Smith Mar 16
问题是linq语句按照他们出生的年份和日期对他们进行排序。因此,如果Sally出生于1962年,John和Benny出生于1988年,那么GridView显示如下:
Sally Smith Mat 5
John Smith Mar 1
Benny Smith Mar 16
在四处挖掘之后,我试着这样做,这里的另一个问题说会奏效。
List<BirthdayCurrentMonthView> record =
(from tab in db.BirthdayCurrentMonthViews
orderby tab.Birthday ascending
select tab).ToList();
string customFormat = "MMM d";
var ud = record.Select(d => new
{
d.FirstLast,
Formattedate = d.Birthday.ToString(customFormat)
})
.Distinct()
.OrderByDescending(d => d.FormattedDate);
this.grdBirthdays.DataSource = record;
this.grdBirthdays.DataBind();
问题是我一直得到错误:"方法"ToString"不重载,需要1个参数"
我看到的例子都是这样做的,所以我不知道它为什么不接受它
如果你能帮助我那就太好了。我只希望GridView上的行按天显示。谢谢
生日当前月份查看:
SELECT EmployeeID, ActiveDirectoryName, FirstName, LastName, FirstName + ' ' + LastName AS FirstLast, Birthday, Anniversary, IsActive
FROM dbo.Employee
WHERE (DATEPART(month, Birthday) = DATEPART(month, GETDATE()))
EmployeeID (int, not null)
ActiveDirectoryName (varchar(100), null)
FirstName (varchar(50), not null)
LastName (varchar(100), not null)
FirstLast (varchar(151), not null)
Birthday (datetime, null)
Anniversary (datetime, null)
IsActive (bit, null)
C#中的生日定义:
public Nullable<global::System.DateTime> Birthday
{
get
{
return _Birthday;
}
set
{
OnBirthdayChanging(value);
ReportPropertyChanging("Birthday");
_Birthday = StructuralObject.SetValidValue(value);
ReportPropertyChanged("Birthday");
OnBirthdayChanged();
}
}
更新:
解决方案:
List<BirthdayCurrentMonthView> record =
(from tab in db.BirthdayCurrentMonthViews
orderby ((DateTime)tab.Birthday).Day ascending
select tab).ToList();
感谢所有人
听起来Birthday
没有被识别为DateTime
。如果你这样做会发生什么:
((DateTime)d.Birthday).ToString(customFormat)
这将强制生日为DateTime。请记住,如果这不是一个有效的DateTime,那么它将抛出一个错误。
但是,您应该先运行OrderBy
语句,然后执行格式化。对字符串进行排序将按ABC排序,而不是按日期排序。
这有什么问题?
List<BirthdayCurrentMonthView> record =
(from tab in db.BirthdayCurrentMonthViews
orderby tab.Birthday.Day ascending
select tab).ToList();
日期时间。日期是你要求的。显然,我仍然假设您的数据上下文将Birthday映射为DateTime
更新,错误可能是因为Nullable吗?Nullable没有ToString(arg)方法-请先获取Value。
如果我有一个DateTime?
的列表,我只需要堆叠订单并使用HasValue
var bdates = new List<Tuple<string, DateTime?>>();
bdates.Add(Tuple.Create("Sally", (DateTime?)new DateTime(1962, 1, 1)));
bdates.Add(Tuple.Create("John", (DateTime?)new DateTime(1988, 2, 1)));
bdates.Add(Tuple.Create("Benny", (DateTime?)new DateTime(1988, 1, 1)));
bdates.Add(Tuple.Create("Joe", (DateTime?)new DateTime(1988, 1, 2)));
bdates.Add(Tuple.Create("Bob", (DateTime?)null));
var v = bdates
.Where(bdate => bdate.Item2.HasValue)
.OrderBy(bdate => bdate.Item2.Value.Day)
.OrderBy(bdate => bdate.Item2.Value.Month);