ExecuteQuery (en linQ)

05/11/2007 - 17:47 por Carla Rincon | Informe spam
Hola de nuevo.

Quiero saber si puedo hacer que el resultado de una llamada a ExecuteQuery
se entre a un DataTable?

Lo pongo asi:

var tab = DC.ExecuteQuery<System.Data.DataTable>(@"select codigo, nombre
from tabclientes");

//DC es el datacontext de linq.

Me compila bien pero al ejecutarlo me da error.


Carla Rincon
 

Leer las respuestas

#1 Octavio Hernandez
05/11/2007 - 20:49 | Informe spam
Hola, Carla,

El parámetro de tipo que le pasas a ExecuteQuery no puede ser un DataTable,
ni tampoco un DataRow.

Si el DataTable no es tipado el problema no es trivial, porque la clase
DataRow no tiene constructures accesibles. Te recomendaría crearte una clase
con la estructura correspondiente a las tuplas que quieres recuperar. Y
luego te recomendaría
usar LINQ to DataSet (agregar referencia a System.Data.DataSetExtensions y
luego en el código hacer "using System.Data.DataSetExtensions;"). Ahí hay un
método extensor CopyToDataTable que sirve para "copiar" un
IEnumerable<DataRow> a un DataTable.

Te paso un ejemplo de cómo hacerlo. Utilizo nombres y fechas de nacimiento
de futbolistas en vez de código y nombre de clientes, pero en el fondo es lo
mismo. Bueno, y utilizo una consulta integrada "de verdad" en vez de
ExecuteQuery() ;-)

Saludos - Octavio

*******************************************
internal class MyDataTable : DataTable
{
internal MyDataTable()
: base()
{
Columns.Add("Nombre", typeof(string));
Columns.Add("FechaNacimiento", typeof(DateTime));
}

internal DataRow MakeDataRow(string nombre, DateTime dt)
{
DataRow dr = this.NewRow();
dr.BeginEdit();
dr[0] = nombre;
dr[1] = dt;
dr.EndEdit();
return dr;
}
}
private static void ExportarDataTable()
{
using (FutbolDataContext ctx = new FutbolDataContext())
{
ctx.Log = Console.Out;
MyDataTable dt = new MyDataTable();
dt.TableName = "Portugueses";
// consulta LINQ to SQL
var x = from f in ctx.Futbolista
where f.CodigoPaisNacimiento == "PT"
select dt.MakeDataRow(f.Nombre,
f.FechaNacimiento.Value);
// copiar datos a DataTable
x.CopyToDataTable(dt, LoadOption.OverwriteChanges);

// comprobación
foreach (DataRow dr in dt.Rows)
Console.WriteLine(dr[0]);
}
}
*******************************************



"Carla Rincon" <_> wrote in message
news:
Hola de nuevo.

Quiero saber si puedo hacer que el resultado de una llamada a ExecuteQuery
se entre a un DataTable?

Lo pongo asi:

var tab = DC.ExecuteQuery<System.Data.DataTable>(@"select codigo, nombre
from tabclientes");

//DC es el datacontext de linq.

Me compila bien pero al ejecutarlo me da error.


Carla Rincon



Preguntas similares