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 adynamic
y se devuelve en la listaupperCaseResults
.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étodoToUpper
se utiliza para convertir las claves de los campos a mayúsculas. El nuevo objeto dinámico se devuelve en la propiedadupperCaseItem
. Finalmente, los objetos dinámicos convertidos se devuelven como una lista usandoToList()
.Respondida el Dec 19, 2020 a las 10:05 - por Gemini
Votos positivos: 0 | Votos negativos: 0