Gracias por la respuesta me acerco un poco mas, pero lo resolví de otra formar. Dejo como lo hice por si alguien le sirve...
De todas formas si hay una forma mas óptima y alguien quiere postearla es bienvenida.
De todas formas si hay una forma mas óptima y alguien quiere postearla es bienvenida.
Código (csharp) [Seleccionar]
using System;
using System.Data;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataSet ds = new DataSet("root");
ds.ReadXml("../../XMLFile1.xml");
foreach (DataRow drp in ds.Tables["persona"].Rows)
{
// Esta columna de la tabla la genera el DataSet no el archivo XML
Int32 persona_Id = drp.Field<Int32>("persona_Id");
Console.WriteLine("persona_Id: " + persona_Id);
Console.WriteLine("id: " + drp.Field<String>("id"));
Console.WriteLine("nombre: " + drp.Field<String>("nombre"));
Console.WriteLine("apellido: " + drp.Field<String>("apellido"));
var query = from p in ds.Tables["persona"].AsEnumerable()
join hs in ds.Tables["hijos"].AsEnumerable() on p.Field<Int32>("persona_Id") equals hs.Field<Int32>("persona_Id")
join h in ds.Tables["hijo"].AsEnumerable() on hs.Field<Int32>("hijos_Id") equals h.Field<Int32>("hijos_Id")
where p.Field<Int32>("persona_Id") == persona_Id
select h;
foreach (DataRow drh in query)
{
Console.WriteLine("Hijo: " + drh.Field<String>("hijo_Text"));
}
Console.WriteLine();
}
Console.ReadLine();
}
}
}