Convertir todos los campos en mayúscula con Linq

Estoy usando linq para consultar datos. Pero quiero que devuelva el campo. A continuación está mi código, ¿cómo transferir todo el campo a la maleta superior?

public List QueryToList(string connStr, string sql)
{
 using (OracleConnection conn = new OracleConnection(connStr))
 {
    conn.Open();
    var results= conn.Query(sql).ToList();
    conn.Close();
    return results; //For now, it would return all fields into lower case.
 }
}

Editar:Gracias por @Alen. Toma, uso el código de abajo y devuelve el resultado que quiero.

public List  QueryToList(string connStr, string sql) 
{
conn.Open();
var results = conn.Query(sql);
conn.Close();

var valueResult = new List();
foreach (dynamic item in results)
{
    var dicItem = item as IDictionary;
    var x = new ExpandoObject();
    foreach (var i in dicItem.Keys)
    {
        ((ICollection>)x).Add(new KeyValuePair(i.ToUpper(), dicItem[i]));
    }
    valueResult.Add(x);
}
return valueResult; 
}

Pregunta hecha hace 3 años, 4 meses, 29 días - Por codecanvas


3 Respuestas:

  • Bueno estoy de acuerdo con @Panagiotis Kanavos, incluso mejor es convertir los datos a un objeto de clase.

    Incase you still want to do it as such

    Aquí hay un ejemplo.

    public List  QueryToList(string connStr, string sql) {
      var valueResult = new List  ();
      using(OracleConnection conn = new OracleConnection(connStr)) {
        conn.Open();
        var results = conn.Query(sql).ToList();
        conn.Close();
        foreach(var item in results) {
          var dicItem = item as Dictionary  ;
          var x = new ExpandoObject();
          forEach(var i in dicItem.Keys)
            ((ICollection>)x).Add(i.ToUpper(), dicItem[i]);
          valueResult.Add(x);
        }
    
        return valueResult;
      }
    }
    

    Respondida el Dec 18, 2020 a las 09:55 - por daniel1

    Votos positivos: 0 | Votos negativos: 0

  • En el código que has proporcionado, estás tratando de convertir todos los campos en mayúscula mientras recorres los resultados de la consulta. Sin embargo, estás recibiendo un error porque estás intentando castear un ExpandoObject a una colección que no es posible hacerlo de esa manera.

    Para lograr el objetivo de convertir todos los campos en mayúscula, podrías utilizar un enfoque de proyección utilizando LINQ. Aquí te dejo un ejemplo de cómo podrías modificar tu método QueryToList para que todos los campos se conviertan a mayúscula usando LINQ:

    csharp
    public List QueryToList(string connStr, string sql)
    {
        using (OracleConnection conn = new OracleConnection(connStr))
        {
            conn.Open();
            var results = conn.Query(sql);
    
            var upperCaseResults = results.Select(item =>
            {
                var dicItem = item as IDictionary;
                var upperCaseDic = dicItem.ToDictionary(kv => kv.Key.ToUpper(), kv => kv.Value);
                return (dynamic)upperCaseDic;
            }).ToList();
    
            conn.Close();
            return upperCaseResults;
        }
    }
    

    En este código, la parte importante es el uso de results.Select para proyectar cada elemento de los resultados en un nuevo diccionario en el cual las claves están en mayúscula. Luego, se convierte el diccionario proyectado de vuelta a dynamic y se devuelve en la lista upperCaseResults.

    Con este enfoque, puedes lograr el resultado deseado de convertir todos los campos en mayúscula en tus resultados de consulta. Recuerda que es importante tener en cuenta que al trabajar con dynamic, se pierde la información estática de los tipos, por lo que debes tener cuidado al manipular los datos resultantes.

    Respondida el Dec 19, 2020 a las 09:54 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Solución Original:

    La solución original proporcionada utiliza el método Query de Oracle.Connection para ejecutar la consulta SQL y devolver los resultados como una lista de objetos dinámicos. Sin embargo, los campos en los objetos dinámicos se devuelven en minúsculas.

    Solución Propuesta:

    Para convertir todos los campos a mayúsculas, se puede utilizar el siguiente código:

    
    public List QueryToList(string connStr, string sql)
    {
        using (OracleConnection conn = new OracleConnection(connStr))
        {
            conn.Open();
            var results = conn.Query(sql);
            conn.Close();
    
            // Convertir todos los campos a mayúsculas
            var upperCaseResults = results.Select(x =>
            {
                var item = x as IDictionary;
                var upperCaseItem = new ExpandoObject();
                foreach (var key in item.Keys)
                {
                    ((ICollection>)upperCaseItem).Add(new KeyValuePair(key.ToUpper(), item[key]));
                }
                return upperCaseItem;
            });
    
            return upperCaseResults.ToList();
        }
    }
    

    Explicación:

    El código utiliza el método Select de LINQ para convertir cada objeto dinámico en un nuevo objeto dinámico con campos en mayúsculas. El método ToUpper se utiliza para convertir las claves de los campos a mayúsculas. El nuevo objeto dinámico se devuelve en la propiedad upperCaseItem. Finalmente, los objetos dinámicos convertidos se devuelven como una lista usando ToList().

    Respondida el Dec 19, 2020 a las 10:05 - por Gemini

    Votos positivos: 0 | Votos negativos: 0