我有一个返回Object
数组的方法。在Object
数组中,数据是datetime。我需要将DateTime
数组转换为date数组。 responseRows
会返回DateTime
个数据。有没有办法可以将DateTime
转换为日期数组。
代码
public static object[] ExtractColumn(ResponseRow[] responseRows, int columnIndex)
{
if (columnIndex < 0)
{
return null;
}
return responseRows.Select(x => x.RowData[columnIndex]).ToArray();
}
答案 0 :(得分:0)
由于没有针对c#的Date数据类型,因此可以使用零来获取DateTime对象中的Date部分。您可以将列转换为DateTime Convert.ToDateTime对象,然后使用Date属性,仅获取日期部分。
public static DateTime[] ExtractColumn(ResponseRow[] responseRows, int columnIndex)
{
if (columnIndex < 0)
{
return null;
}
return responseRows.Select(x => Convert.ToDateTime(x.RowData[columnIndex]).Date).ToArray();
}
修改如果您的列已经是DateTime类型,那么您不需要Convert.ToDateTime
答案 1 :(得分:0)
因此,您不知道传递给此方法的列是DateTime
列。但如果是你要删除时间部分。检查类型以及是否DateTime
使用DateTime.Date
:
public static object[] ExtractColumn(ResponseRow[] responseRows, int columnIndex)
{
if (columnIndex < 0)
{
return null;
}
object[] objects = new object[responseRows.Length];
for (int i = 0; i < objects.Length; i++)
{
object data = responseRows[i].RowData[columnIndex];
if(data is DateTime)
data = ((DateTime)data).Date;
objects[i] = data;
}
return objects;
}
这个循环比LINQ方法更有效。无论如何你想看到它:
object[] objects = responseRows
.Select(rr => rr.RowData[columnIndex])
.Select(data => data is DateTime ? ((DateTime)data).Date : data)
.ToArray();
答案 2 :(得分:0)
感谢大家的时间。在您的评论的帮助下,我能够解决我的问题,如下所示:
public static object[] ExtractColumn(ResponseRow[] responseRows, int columnIndex)
{
if (columnIndex < 0)
{
return null;
}
if (responseRows.Any(x => x.RowData[columnIndex] is DateTime))
{
return responseRows.Select(x => Convert.ToDateTime(x.RowData[columnIndex]).Date).Cast<object>().ToArray();
}
return responseRows.Select(x => x.RowData[columnIndex]).ToArray();
}