No válido el uso de la función de agregación Sum() y Tipo: Cadena de

Tengo una tabla de datos y una columna contiene los valores int. No he especificado la columna con cualquier tipo de datos. Cuando yo realice los siguientes.

object sum = dttest.Compute("sum(Value)", "");

Estoy recibiendo por debajo de error.

No válido el uso de la función de agregación Sum() y Tipo: String.

Y he tratado de convertir el valor de la columna a int utilizando

object sum = dttest.Compute("sum(Convert(Value, 'System.Int32'))","");

de nuevo me estoy haciendo otro error

Error de sintaxis en conjunto argumento: se Esperaba un único argumento de la columna
con posible ‘Niño’ calificador.

Cuando me especificar el tipo de datos para la columna, primer código devolverá el valor correcto. Pero en mi caso yo no puedo especificar la columna de tipo de datos. Cualquier uno que tiene solución ?

4 Kommentare

  1. 8

    Puede usar LINQ para Datatable:

     var result = dttest.AsEnumerable()
                        .Sum(x => Convert.ToInt32(x["Value"]));

    Ejemplo de cómo Sum para el nombre específico:

     var result = dttest.AsEnumerable()
                        .Where(r => r.Field<string>("Name") == "FilterName")
                        .Sum(x => Convert.ToInt32(x["Value"]));
    • Gracias, Tengo el resultado. Puedo realizar cualquier registro de filtracion de proceso aquí? No quiero realizar la suma() en todos los registros.
    • Sí, usted puede utilizar Where
    • Actualizado mi respuesta
  2. 1

    intentar

    object sum = dttest.Compute("Sum(Value)", "[Value] IS NOT NULL");

    Código de ejemplo

        static DataTable GetTable()
        {
            DataTable table = new DataTable();
            table.Columns.Add("Value", typeof(int));
            table.Columns.Add("Name", typeof(string));
            table.Rows.Add(null, "a");
            table.Rows.Add(50, "a");
            table.Rows.Add(10, "a");
            table.Rows.Add(21, "b");
            table.Rows.Add(100, "b");
            return table;
        }
        static void Main(string[] args)
        {
            DataTable dt =GetTable();
            var str = dt.Compute("Sum(Value)", "Name='a' and Value is not null");
        }

    Usted no puede Llamar a la Suma con Convertir, pero se puede tratar a continuación

    DataTable dt =GetTable();
    dt.Columns.Add("temp", typeof(int), "Convert(Value, 'System.Int32')");
    var str = dt.Compute("Sum(temp)", "Name='a' and Value is not null");
    • Sigue recibiendo mismo elenco de error. Todos los valores en la tabla son de tipo int.
    • comprobar mi respuesta actualizada, se está trabajando bien con Compute y sin errores.
    • Pero el problema es que no se especifica el tipo de datos de la columna. Datatable se llena a partir de una consulta sql. Lo que nunca la columna de regresar de consulta sql se rellenará en el objeto datatable.
    • se puede actualizar a la pregunta de cómo obtener datos de la base de datos y cuál es el tipo de columna de Value en db?
  3. 0

    intentar

    dttest.Compute("Sum(Convert([Value], 'System.Int32'))","[Value] IS NOT NULL");
    • Im que consigue construir error «No hay sobrecarga de método ‘Calcular’ toma 1 argumentos»
  4. 0

    Cuando intenta el programa se suma un datatable de la columna en la cual declaró como las cuerdas de este error ocurre.

    Utilice el siguiente código para calcular la operación en la columna de cadena.

    dtTable.Compute("Sum(Convert(" + col_Name + ", 'System.Int32')",""); 

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea