creé un ayudante (en una clase estática llamé DataRowHelpers
, inventivo, lo sé) llama IsEmpty
de la siguiente manera:
public static bool IsEmpty(this DataRow row)
{
return row == null || row.ItemArray.All(i => i is DBNull);
}
Las otras respuestas aquí son correctos. Simplemente sentí que la mía prestaba brevedad en su uso sucinto de Linq a los Objetos. Por cierto, esto es realmente útil junto con el análisis de Excel, ya que los usuarios pueden virar en una fila en la página (miles de líneas) sin tener en cuenta cómo afecta el análisis de los datos.
En la misma clase, puse otros ayudantes que encontré útiles, como analizadores, de modo que si el campo contiene texto que sabe que debe ser un número, puede analizarlo con fluidez. Consejo profesional de menor importancia para cualquier persona nueva en la idea. (?! Cualquier persona en el SO, realmente NAH)
Con esto en mente, aquí es una versión mejorada:
public static bool IsEmpty(this DataRow row)
{
return row == null || row.ItemArray.All(i => i.IsNullEquivalent());
}
public static bool IsNullEquivalent(this object value)
{
return value == null
|| value is DBNull
|| string.IsNullOrWhiteSpace(value.ToString());
}
Ahora tiene otro ayudante útil, IsNullEquivalent
que se puede utilizar en este contexto y cualquier otra , también. Puede ampliar esto para incluir cosas como "n/a"
o "TBD"
si sabe que sus datos tienen marcadores de posición como ese.
En realidad, la condición dentro del foreach debería tener más que eso. Sólo probado :) algo como: (! value.ToString() = "") if (! valor = null) { si { return false; } } – Ash
@Swoosh, supongo que eso depende de cuál sea tu definición de "vacío". Fui con "nulo". =) – Rob
Esto no tiene en cuenta los valores predeterminados de las columnas, ni las columnas con incremento automático - ver mi respuesta. – Joe