动态SQL存储过程到Linq到SQL

时间:2012-01-09 21:31:37

标签: sql linq-to-sql reflection dynamic

我有一个存储过程,它从表中返回一个选择。该表是动态选择的。程序如下:

ALTER Procedure [dbo].[GetRecordsInViewPort]
    @DatabaseName VarChar(100),
    @TableName VarChar(100),
AS
  Declare @SQL VarChar(1000)

  SELECT @SQL = 'SELECT * FROM ' 
  SELECT @SQL = @SQL + + @DatabaseName + '.dbo.' + @TableName

  EXEC(@SQL)

执行时,它在SQL中运行正常。如何从Linq-to SQL中使用此过程?当我尝试执行它时,我只回到0。 Linq-to-SQL设计器中存储过程的返回类型属性设置为(None),无法修改。

是否可以动态映射存储过程结果,然后返回List<<r>dynamic>

简而言之,我认为我希望接受存储过程的结果作为动态List,我可以通过反射在运行时访问其属性。有什么想法吗?

此外,如果在Linq-To-Entities中更容易做到这一点,我会对任何事情持开放态度。

1 个答案:

答案 0 :(得分:1)

IEnumerable<Customer> customers = dataContext.ExecuteQuery<Customer>(
  @"EXEC GetRecordsInViewPort {0},{1}", "databaseName", "Customer");

List<Customer> result = customers.ToList();

<Soapbox>
  

我希望接受存储过程的结果作为动态List,我可以在运行时访问它的属性

LinqToSql的重点是构造编译器检查的查询并获得编译器检查结果。如果您不想这样做,则不应使用此ORM。

您可以使用SqlConnection.ExecuteReader清楚地获取数据。

</Soapbox>