我有从数据库中获取所有订单的代码,但是变量ArriveTime和Paymethod在数据库中是可以为空的。如果Paymethod在数据库中返回DBNull,我希望它变成iDeal,当ArriveTime为DBNull时,我希望它变成null。我如何在不得到重复代码的情况下做到这一点。
现在,除了在代码中加入大量的if-statements之外,我想不出其他的方法了……
当前代码(5) =到货时间和(8) = paymethod:
public List<OrderDTO> GetAllOrders()
{
using (SqlConnection con = new SqlConnection(connectionString))
{
string query = "SELECT * FROM [dbo].[Order]";
using (SqlCommand cmd = new SqlCommand(query, con))
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
List<OrderDTO> orders = new List<OrderDTO>();
int orderIDindex = 1;
while (reader.Read())
{
if (reader.IsDBNull(5))
{
OrderDTO orderDTO = new OrderDTO
{
OrderID = Convert.ToInt32(reader["OrderID"]),
TotalPrice = Convert.ToInt32(reader["TotalPrice"]),
UserID = Convert.ToInt32(reader["UserID"]),
OrderDate = Convert.ToDateTime(reader["OrderDate"]),
ArriveTime = null,
To_Adress = reader["To_Adress"].ToString(),
ItemCount = Convert.ToInt32(reader["ItemCount"]),
Status = (OrderStatus.Orderstatus)Enum.Parse(typeof(OrderStatus.Orderstatus), reader["Status"].ToString()),
};
orders.Add(orderDTO);
}
else if (reader.IsDBNull(8))
{
OrderDTO orderDTO = new OrderDTO
{
OrderID = Convert.ToInt32(reader["OrderID"]),
TotalPrice = Convert.ToInt32(reader["TotalPrice"]),
UserID = Convert.ToInt32(reader["UserID"]),
OrderDate = Convert.ToDateTime(reader["OrderDate"]),
Paymethod = PayMethod.Paymethod.iDeal,
To_Adress = reader["To_Adress"].ToString(),
ItemCount = Convert.ToInt32(reader["ItemCount"]),
Status = (OrderStatus.Orderstatus)Enum.Parse(typeof(OrderStatus.Orderstatus), reader["Status"].ToString()),
};
orders.Add(orderDTO);
}
}
return orders;
}
}
}发布于 2019-12-09 19:48:22
将重复的代码移出条件
//...omitted for brevity
while (reader.Read()) {
OrderDTO orderDTO = new OrderDTO {
OrderID = Convert.ToInt32(reader["OrderID"]),
TotalPrice = Convert.ToInt32(reader["TotalPrice"]),
UserID = Convert.ToInt32(reader["UserID"]),
OrderDate = Convert.ToDateTime(reader["OrderDate"]),
To_Adress = reader["To_Adress"].ToString(),
ItemCount = Convert.ToInt32(reader["ItemCount"]),
Status = (OrderStatus.Orderstatus)Enum.Parse(typeof(OrderStatus.Orderstatus), reader["Status"].ToString()),
};
if (reader.IsDBNull(5)) orderDTO.ArriveTime = null;
if (reader.IsDBNull(8)) orderDTO.Paymethod = PayMethod.Paymethod.iDeal,
orders.Add(orderDTO);
}
//...omitted for brevity如果在not DBNull时使用这些值,则检查条件,否则提供适当的值。
OrderDTO orderDTO = new OrderDTO {
//...omitted for brevity
ArriveTime = reader.IsDBNull(5) ? null : Convert.ToDateTime(reader[5]),
Paymethod = reader.IsDBNull(8) ? PayMethod.Paymethod.iDeal : //...parse the value,
//...omitted for brevity
};https://stackoverflow.com/questions/59248148
复制相似问题