にLINQを介して可変列の長さを返すことができます私は、インターネットラウンド検索を持っていたし、直接私が後だものと一致する何かを見つけることができません....がどのようにSQL
私は返すストアドプロシージャを持っています(ColumnA、ColumnB、ColumnCと言う)を追加し、追加の列(おそらくColumnD、ColumnEとColumnF、またはColumnF、ColumnP、ColumnT、ColumnW)の不確定な数/署名を返します。
クエリの動的部分は、Idパラメータによってprocに決定されます。
残念ながら、私はスキーマを制御することができず、追加のテーブルを持たずに非常に多くの無関係の列を最後に追加して(そしてそれらを追加し続ける)ように設計されていません。これを効果的に保管してください。
結果として、コンパイル時に確定した列のセットを返すことができないため、LINQ to SQLはストアドプロシージャの戻り値の型を判別できません。
他にもオプションがありますか、これを回避する方法はありますか?ここでは、私が下でやっていることの例を挙げます。 LINQ to SQLで動作するようにこれを書き直すことはできますか?私はC#とSQL Server 2008を使ってアプリケーションを作成しています。
ありがとうございました。
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
おかげで、私はそれに基づいて、今取り組んでそれを持っています。 – Michael
@Michaelは聞いてうれしいです:) –