Puedo recibir una tabla de datos de excel y archivos de datos en la primera Columna se parece a esto:

11129

DBNull.Valor

29299

29020

DBNull.Valor

29020

Estoy usando LINQ para seleccionar municipio y funciona si no hay DBNull.El valor de los valores de la siguiente.
albumIds = dt.AsEnumerable().Seleccione(p => (int)p.Campo(«F1»)).Distintos().ToArray();

Pero si DBNull.Valor presente que representan vacío celdas de excel puedo obtener errores de conversión.

¿Cómo puedo filtrar los DBNull.Valor de mi conjunto de resultados?

Gracias

  • ¿Cómo obtienen los datos de excel a una tabla de datos? Hay más de una columna?
InformationsquelleAutor Sergey | 2009-04-17

5 Comentarios

  1. 3

    Como se insinúa en Jeremy respuesta, Si usted tiene una referencia a System.Data.DataSetExtensions.dll, obtendrá un poco de práctica los métodos de extensión para trabajar con conjuntos de datos y tablas de datos utilizando LINQ. En concreto, puede utilizar el Campo de<int?>() método para convertir una columna de tipo entero que puede contener DBNull en una columna de valores null int…

    albumIds = dt.AsEnumerable().Select(row => row.Field<int?>("F1"))
                                .Where(val => val.HasValue)
                                .Select(val => val.Value)
                                .Distinct()
                                .ToArray();
    • Campo<int?>() es lo que yo estaba buscando, gracias.
  2. 0

    Sólo es necesario filtrar los valores null en primer lugar. Entonces su expresión LINQ debe trabajar mucho.

    • Sí es así ¿cómo puedo filtrar los valores Null?
  3. 0

    Usted necesita para comprobar los campos para DBNull antes de intentar la conversión mediante el método where es probablemente más fácil.

    dt.AsEnumerable().Where(p => p.Field("F1") != DBNull.Value).Select(p => (int)p.Field("F1")).Distinct().ToArray();
    • esto no va a funcionar porque con Extensión de Campo se puede especificar un Campo de tipo<T>
  4. 0

    Puedes intentar esto:

    dt.AsEnumerable().Where(p => p.IsNull("F1") == false)
      .Select(p => p.Field<int>("F1")).Distinct().ToArray();

    Realmente no puedo comprobar esto, ya que no tienen este DB instalación

  5. -1

    Voy a responder a mi propia pregunta.

    Lugar de utilizar Linq hago un bucle foreach y eliminar filas si el valor es null.
    y, a continuación, hacer Linq distintos

                foreach(DataRow row in dt.Rows)
                {
                    if (String.IsNullOrEmpty(row["F1"].ToString()))
                        row.Delete();
                }
    
                dt.AcceptChanges();
    
                albumIds = dt.AsEnumerable().Select(p => (int)p.Field<double>("F1")).Distinct().ToArray();

Dejar respuesta

Please enter your comment!
Please enter your name here