ho creato un aiutante (in una classe statica ho chiamato DataRowHelpers
, inventiva, lo so) chiamato IsEmpty
come segue:
public static bool IsEmpty(this DataRow row)
{
return row == null || row.ItemArray.All(i => i is DBNull);
}
Le altre risposte qui sono corrette. Ho appena sentito che il mio ha prestato brevità nel suo uso succinto di Linq to Objects. A proposito, questo è davvero utile in combinazione con l'analisi di Excel, in quanto gli utenti possono virare su una riga in giù nella pagina (migliaia di righe) senza riguardo a come questo influisce sull'analisi dei dati.
Nella stessa classe, ho messo tutti gli altri helper che ho trovato utili, come i parser in modo che se il campo contiene del testo che tu sai dovrebbe essere un numero, puoi analizzarlo fluentemente. Suggerimento per i meno esperti per chiunque sia nuovo all'idea. (?! Chiunque a SO, davvero Nah)
Con questo in mente, qui è una versione migliorata:
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());
}
Ora avete un altro aiutante utile, IsNullEquivalent
che può essere utilizzato in questo contesto e qualsiasi altra , pure. Si potrebbe estendere questo per includere cose come "n/a"
o "TBD"
se si sa che i tuoi dati hanno segnaposto del genere.
fonte
2015-07-31 16:31:34
in realtà la condizione all'interno del foreach dovrebbe avere più di quello. appena testato :) qualcosa come: (! value.ToString() = "") if (! value = null) { se { return false; } } – Ash
@Swoosh, immagino che dipenda da quale sia la tua definizione di "vuoto". Sono andato con "null". =) – Rob
Questo non tiene conto dei valori predefiniti delle colonne, né delle colonne di auto-incremento - vedi la mia risposta. – Joe