ternario - operator c#
El tipo de expresión condicional no puede determinarse (1)
Estoy tratando de guardar el valor del conjunto de datos a la lista aquí está mi código
GetPostWRTPager_Class = ds.Tables[0]
.AsEnumerable()
.Select(r => new GetPostWRTPager() {
IsApproved = r["IsApproved"] == DBNull.Value
? DBNull.Value
: Convert.ToInt32(r["IsApproved"]),
ApprovedBy = r["ApprovedBy"],
ApprovedOn = Convert.ToDateTime(r["ApprovedOn"]), })
.ToList();
siempre me está dando el error definido a continuación
El tipo de expresión condicional no se puede determinar porque no hay una conversión implícita entre ''System.DBNull'' e ''int''
Qué esta mal en mi codigo
Sí, no hay conversión implícita entre DBNull
e int
. Pero puede usar el método de extensión de Field
que admite tipos anulables (mejor que usar System.Object
):
IsApproved = r.Field<int?>("IsApproved"),
Si no puede cambiar esa propiedad para convertirla en int?
tienes que convertir el int
al object
:
IsApproved = r.IsNull("IsApproved") ? DBNull.Value : (object)r.Field<int>("IsApproved"),
Si quieres un valor int
y 0 en caso de que sea NULL
:
IsApproved = r.Field<int?>("IsApproved").GetValueOrDefault(),
Si IsApproved
realidad es una propiedad bool
(lo que su nombre sugiere) y solo 1 significa true
:
IsApproved = r.Field<int?>("IsApproved") == 1,