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,

Mostrar la cita
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
#2 Alfredo Novoa
12/10/2008 - 13:03 | Informe spam
Hola Octavio,

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

Mostrar la cita
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
#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
#4 Alfredo Novoa
15/10/2008 - 12:44 | Informe spam
El Mon, 13 Oct 2008 17:11:47 -0700 (PDT), edcha escribió:

Mostrar la cita
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
#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
Ads by Google
Search Busqueda sugerida