Estoy intentando ejecutar una consulta linq pero necesito el resultado como una tabla de datos porque estoy usando eso para almacenar registros de diferentes consultas en el mismo objeto viewstate.La forma más rápida de llenar DataTable desde la consulta LINQ usando DataContext
Las 2 versiones siguientes compilan pero devuelven un conjunto vacío. El error exacto es "El valor no puede ser nulo. Nombre del parámetro: origen". (Y sí He comprobado que hay datos): no parecen
MyDatabaseDataContext db = new MyDatabaseDataContext(conn);
IEnumerable<DataRow> queryProjects =
(from DataRow p in db.STREAM_PROJECTs.AsEnumerable()
where p.Field<int>("STREAM_ID") == StreamID
select new
{
PROJECT_ID = p.Field<int>("PROJECT_ID"),
PROJECT_NAME = p.Field<string>("PROJECT_NAME")
}) as IEnumerable<DataRow>;
DataTable results = queryProjects.CopyToDataTable<DataRow>();
...
//(from p in db.STREAM_PROJECTs.AsEnumerable()
//where p.STREAM_ID == StreamID
//select new
//{
// p.PROJECT_NAME,
// p.PROJECT_ID
//}) as IEnumerable<DataRow>;
Los ejemplos de este thread a trabajar en esta situación tampoco.
Supongo que podría ejecutar un comando de consulta SQL a la antigua usanza, pero ¿no se supone que es más rápido?
veo - por lo que se acaba escondiendo la InvalidCastException ? ¿Cómo lo meto en la tabla de datos? – JumpingJezza
@JumpingJezza: Sí; 'as' se debe usar en casos en los que sepa que el objeto podría no ser del tipo que está esperando y no es un caso" excepcional ". La palabra clave 'as' se evalúa como' null' si el molde no es válido, y (como resultado) solo se puede usar con tipos de referencia y 'Nullable'. Vea la edición que acabo de publicar para un método de extensión de muestra que puede convertir cualquier 'IEnumerable ' en 'DataTable'. –
¡Perfecto! Además, descubrí algo nuevo sobre 'as' :) – JumpingJezza