Tengo el siguiente código que rellena dataTable1
y dataTable2
con dos consultas SQL simples, dataTableSqlJoined
se completa desde las mismas tablas pero se unen.Crear DataTable combinada de dos DataTables unidas con LINQ. C#
Estoy tratando de escribir una consulta LINQ que pueda crear el dataTableLinqJoined
como si se hubiera creado mediante SQL. En mi ejemplo a continuación, solo devuelve los valores de dataTable1.
El problema que tengo es qué poner en el SELECT
de la consulta linq. ¿Cómo puedo crear un DataRow nuevo que contenga todas las Columnas de ambas DataRows? No sabré el nombre/esquema exacto de las columnas de las consultas hasta el tiempo de ejecución.
sqlCommand = new SqlCommand("SELECT ID, A, B FROM Table1", sqlConnection, sqlTransaction);
sqlAdapter = new SqlDataAdapter(sqlCommand);
DataTable dataTable1 = new DataTable();
sqlAdapter.Fill(dataTable1);
sqlCommand = new SqlCommand("SELECT ID, C, D FROM Table2", sqlConnection, sqlTransaction);
sqlAdapter = new SqlDataAdapter(sqlCommand);
DataTable dataTable2 = new DataTable();
sqlAdapter.Fill(dataTable2);
sqlCommand = new SqlCommand("SELECT Table1.ID, A, B, Table2.ID, C, D FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID", sqlConnection, sqlTransaction);
sqlAdapter = new SqlDataAdapter(sqlCommand);
DataTable dataTableSqlJoined = new DataTable();
sqlAdapter.Fill(dataTableSqlJoined);
var dataRows =
from
dataRows1 in dataTable1.AsEnumerable()
join
dataRows2 in dataTable2.AsEnumerable()
on
dataRows1.Field<int>("ID") equals dataRows2.Field<int>("ID")
select
dataRows1; // + dataRows2;
DataTable dataTableLinqJoined = dataRows.CopyToDataTable();
Para un fondo poco más, la consulta combinada es muy DB intensivo y está causando problemas de rendimiento. Los datos devueltos por la primera consulta son bastante estáticos y pueden almacenarse en caché. Los datos devueltos por la segunda consulta cambian constantemente, pero se ejecutan rápidamente y, por lo tanto, no necesitan almacenarse en caché. También hay un montón de código que depende del paso de la DataTable combinada y, por lo tanto, no hay muchas opciones factibles disponibles para pasar los datos en un formato diferente.
Tengo una pequeña curiosidad acerca de cómo, por un lado, conoces el rendimiento de estas consultas en forma absoluta, pero por otro lado, no conoces la estructura de la tabla hasta el tiempo de ejecución. –
Las consultas se crean dinámicamente. –