que he tenido una búsqueda alrededor de la Internet y no se puede encontrar nada que coincida directamente lo que busco ....¿Cómo puedo volver longitudes de columna a través de variables de LINQ to SQL
Tengo un procedimiento almacenado que devuelve un conjunto fijo de columnas (digamos ColumnA, ColumnB y ColumnC) y luego devuelve un número indeterminado/firma de columnas adicionales (tal vez ColumnD, ColumnE y ColumnF, o ColumnF, ColumnP, ColumnT y ColumnW).
La parte dinámica de la consulta está determinada por un Id param del proc.
Lamentablemente no tengo el control del esquema y ha sido mal diseñado para tener un gran número de columnas no relacionadas agregadas al final (y las siguen agregando), en lugar de tener una tabla adicional para almacenar esto de manera efectiva.
Como resultado, no puedo devolver un conjunto determinado de columnas en tiempo de compilación, por lo que LINQ to SQL no puede determinar el tipo de devolución del procedimiento almacenado.
¿Tengo otras opciones o formas de evitar esto? Aquí hay un ejemplo de lo que estoy haciendo a continuación. ¿Puedo volver a escribir esto para trabajar con LINQ to SQL? Estoy escribiendo la aplicación con C# y SQL Server 2008 si eso ayuda.
Gracias.
CREATE PROCEDURE [Foo].[GetBar]
(
@Id INT,
@FooVar VARCHAR(50),
@BarVar DATE
)
AS
BEGIN
CREATE TABLE #TempTbl
(
[ColumnName] VARCHAR(50)
)
INSERT #TempTbl EXEC [Foo].GetColumnNames @Id
DECLARE @ColumnNameList NVARCHAR(max)
SET @ColumnNameList = ''
SELECT @ColumnNameList = COALESCE(@ColumnNameList + '],[', '') + ColumnName FROM #TempTbl
DROP TABLE #TempTbl
SELECT @ColumnNameList = @ColumnNameList + ']'
SELECT @ColumnNameList = SUBSTRING(@ColumnNameList, 3, LEN(@ColumnNameList))
DECLARE @FixedColumns VARCHAR(200)
DECLARE @SelectQuery NVARCHAR(max)
DECLARE @WhereQuery VARCHAR (100)
DECLARE @FullQuery NVARCHAR(max)
DECLARE @ParamaterDef nvarchar (100)
DECLARE @Foo VARCHAR(50)
DECLARE @Bar DATE
SET @FixedColumns = N'[ColumnA], [ColumnB], [ColumnC], '
SET @SelectQuery = N'SELECT ' + @FixedColumns + @ColumnNameList + N' FROM [Foo].[FooBar] '
SET @WhereQuery = N'WHERE [Foo] = @Foo AND [Bar] = @Bar'
SET @FullQuery = @SelectQuery + @WhereQuery
SET @ParamaterDef = N'@Foo VARCHAR(50), @Bar DATE'
EXECUTE sp_executesql @FullQuery, @ParamaterDef, @Foo = @FooVar, @Bar = @BarVar
END
Gracias por su sugerencia, he tengo trabajo ahora se basa en eso. – Michael
@Michael me alegra oír :) –