Ayuda de LinQ To XML con Sum, Count, Min y Max

11/10/2008 - 21:33 por edcha | Informe spam
Como veran estoy aprendiendo esto de LinQ To XML
Tengo el siguiente archivo XML

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<!--A sample xml file-->
<employees>
<employee id="1" salaried="false">
<horas>150</horas>
<name>Gustavo Achong</name>
<hire_date>7/31/1996</hire_date>
</employee>
<employee id="2" salaried="true">
<horas>200</horas>
<name>Kim Abercrombie</name>
<hire_date>12/12/1997</hire_date>
</employee>
</employees>

Lo cargo asi

string dirXml = System.AppDomain.CurrentDomain.BaseDirectory +
"Reg.xml";
XElement xEleLoad = XElement.Load(dirXml);


Para cargar el archivo tengo esta consulta con LinQ

var nomPer = from nomElement in xEleLoad.Descendants("employee")
where nomElement.Element("name").Value == "Carla Adams"
orderby (string)nomElement.Element("name")
let fullName = (string)nomElement.Element("name") +
" " + DateTime.Parse(nomElement.Element("hire_date").Value).Date
select new {
ID = (int)nomElement.Attribute("id"),
FullName = fullName,
Name = (string)nomElement.Element("name"),
Year = (DateTime)nomElement.Element("hire_date"),
};

Pero el asunto es que no se como incluir en la parte de "select" los
Sum, Count, Min y Max
lo que quiero saber es si se puede hacer eso de tal manera que tenga
varias variables con cada una de ellas


hasta el momento solo lo he podido hacer de la siguiente forma y
tendria que hacaer una consulta para varios SUM

var maxHoras = xEleLoad.Descendants("employee")
.Sum(varEle => (int)varEle.Attribute("id"));

¿Como puedo evitar hacer varias consultas como en el segundo ejemplo y
en una sola consulta hacer todo lo que quiero?

Muchas Gracias Por La Ayuda

Edcha

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
12/10/2008 - 12:22 | Informe spam
Hola,

var maxHoras = xEleLoad.Descendants("employee")
.Sum(varEle => (int)varEle.Attribute("id"));

¿Como puedo evitar hacer varias consultas como en el segundo ejemplo y
en una sola consulta hacer todo lo que quiero?





Simplemente utiliza un bucle foreach:

int totalHoras = 0;
decimal totalSalario = 0.0M;
foreach (var p in xEleLoad.Descendants("employee"))
{
totalHoras += (int) p.Element("horas");
totalSalario += (decimal) p.Element("salario");
};

Los operadores Sum, Average, etc. se "tragan" toda la secuencia de entrada y
no son encadenables (devuelven un escalar), por lo que necesitarías varios
recorridos de la secuencia original para obtener todos los acumulados que
necesitas.

Este post te podría resultar interesante:
http://geeks.ms/blogs/ohernandez/ar...t-gt.aspx.

Slds - Octavio
Respuesta Responder a este mensaje
#2 Alfredo Novoa
12/10/2008 - 13:03 | Informe spam
Hola Octavio,

El Sun, 12 Oct 2008 12:22:27 +0200, Octavio Hernandez escribió:

¿Como puedo evitar hacer varias consultas como en el segundo ejemplo y
en una sola consulta hacer todo lo que quiero?





Simplemente utiliza un bucle foreach:



Pero eso no es "hacer una consulta".

Lo que hay que hacer es meter los datos del archivo XML en una base de
datos relacional y luego ya puedes consultar lo que quieras. Los archivos
XML solo sirven para transmitir datos, y ni para eso son buenos.


Saludos
Respuesta Responder a este mensaje
#3 edcha
14/10/2008 - 02:11 | Informe spam
Gracias a ambos por su ayuda pero el asunto es que quiero evitar ambas
cosas y tengo entendidio que existe una forma de
abrir el archivo y hacer una consulta con LinQ entre lo que incluye
SUM, Count MAX MIN


Alguna solución al respecto?

Gracias a ambos y a los que me den otras sugerencias


Edcha
Respuesta Responder a este mensaje
#4 Alfredo Novoa
15/10/2008 - 12:44 | Informe spam
El Mon, 13 Oct 2008 17:11:47 -0700 (PDT), edcha escribió:

Gracias a ambos por su ayuda pero el asunto es que quiero evitar ambas
cosas y tengo entendidio que existe una forma de
abrir el archivo y hacer una consulta con LinQ entre lo que incluye
SUM, Count MAX MIN



Supongo que eso solo será para LinQ To SQL y LinQ to Entities. Aunque
tampoco estoy seguro por que de LinQ to XML no quiero saber nada.


Saludos
Respuesta Responder a este mensaje
#5 edcha
20/10/2008 - 18:14 | Informe spam
Solo por aprender pues soy nuevo en esto

Que tiene de malo LinQ to XML?

Saludos y Gracias
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida