我的代码工作正常
if (dt.Rows.Count < 0)
{
DataRow row = dt.NewRow();
foreach (DataColumn column in dt.Columns)
{
if (column.ColumnName == "CreatedDate")
{
row[column] = DateTime.MinValue;
}
else
{
row[column] = 0;
}
}
dt.Rows.Add(row);
DataColumn col = new DataColumn("Status", typeof(string));
col.DefaultValue = "0";
dt.Columns.Add(col);
}
return dt;
这个DataTable
的列包含上述数据类型:
我在web api控制器中使用此代码。它以json格式返回SQL查询中的数据
但是如果DataTable
为空,那么为了防止在json中返回一个空数组,我正在使用这个代码;如果是空DataTable
,它将在每个字段中返回零。
现在我将这段代码转换成一行(三元运算符),如下所示:
DataRow row = dt.NewRow();
foreach (DataColumn column in dt.Columns)
{
row[column] = (column.ColumnName == "CreatedDate") ? DateTime.MinValue : 0;
}
dt.Rows.Add(row);
DataColumn col = new DataColumn("Status", typeof(string));
col.DefaultValue = "0";
dt.Columns.Add(col);
return dt;
我也试过这两种方法:
row[column] = (column.DataType == DateTime) ? DateTime.MinValue : 0;
和
column.ColumnName == "CreatedDate" ? (row[column] = DateTime.MinValue) : (row[column] = 0);
但是他们不起作用
错误是:
无法确定条件表达式的类型,因为System.DatTime和int
之间没有隐式转换
如何解决?
答案 0 :(得分:3)
您的三元运算符根据具体情况返回两种不同类型的数据:如果为true则返回DateTime
,如果为false,则返回int
0
。您将结果分配到DateTime
类型的列中 - 并且错误表明没有从int
到DateTime
的隐式转换:
row[column] = (column.ColumnName == "CreatedDate") ? (object)DateTime.MinValue : 0;
答案 1 :(得分:2)
三元运算符?:
必须返回相同类型的值(或者第二个值可以隐式转换为第一个值)。
您尝试返回DateTime
(第一个)或int
(秒),因此转换不存在。
您需要采用多种方式之一。
使用if
对其进行编码(正如您已经完成的那样):
if (column.ColumnName == "CreatedDate")
{
row[column] = DateTime.MinValue;
}
else
{
row[column] = 0;
}
由于row[column]
类型为object
,您可以将DateTime
转换为object
:
row[column] = (column.ColumnName == "CreatedDate") ? (object)DateTime.MinValue : 0;
或者,如果要映射多个列,请执行以下操作:
Dictionary<string, object> defaults = new Dictionary<string, object>()
{
{ "CreatedDate", DateTime.MinValue },
{ "full_name", "n/a" },
{ "Id", default(int) },
};
foreach (DataColumn column in dt.Columns)
{
row[column] = defaults.ContainsKey(column.ColumnName) ? defaults[column.ColumnName] : 0;
}