如何通过LINQ to SQL返回变量列长度

Mic*_*ael 5 .net c# sql t-sql linq

我在互联网上搜索过,找不到任何与我追求的东西直接相符的东西....

我有一个存储过程返回一组固定的列(比如ColumnA,ColumnB和ColumnC),然后另外返回一个不确定的数字/签名的其他列(可能是ColumnD,ColumnE和ColumnF,或ColumnF,ColumnP,ColumnT和ColumnW) .

查询的动态部分由proc的Id参数确定.

不幸的是,我无法控制架构,并且设计得很差,无法在最后添加大量不相关的列(并且它们不断添加它们),而不是有一个额外的表来有效地存储它.

因此,我无法在编译时返回一组确定的列,因此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 
Run Code Online (Sandbox Code Playgroud)

Dar*_*ren 6

你能不能只用一个SQL Data Adapter填充DataSet?然后,您可以使用LINQDataSet并执行所有LINQ操作:

DataTable yourDataTable = ds.Tables["TableName"];

var query =
   from yourDataTable in yourDataTable.AsEnumerable()
   select new
   {
      NewField = yourDataTable.Field<int>("ColumnName"),
      NewField2 = yourDataTable.Field<string>("ColumnName2"),
   };
Run Code Online (Sandbox Code Playgroud)

MSDN(LINQ to DataSet)

MSDN(使用LINQ to DataSet的单表查询