【问题标题】:Dynamic SQL Stored Proc to Linq to SQL动态 SQL 存储过程到 Linq 到 SQL
【发布时间】:2012-01-10 06:01:05
【问题描述】:

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

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>

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

另外,如果这在 Linq-To-Entities 中更容易做到,我愿意接受任何事情。

【问题讨论】:

    标签: sql linq-to-sql reflection dynamic


    【解决方案1】:
    IEnumerable<Customer> customers = dataContext.ExecuteQuery<Customer>(
      @"EXEC GetRecordsInViewPort {0},{1}", "databaseName", "Customer");
    
    List<Customer> result = customers.ToList();
    

    <Soapbox>
    

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

    LinqToSql 的重点是构造编译器检查查询并获得编译器检查结果。如果你不想做这些事情,你不应该使用这个 ORM。

    您可以使用SqlConnection.ExecuteReader 来简单地获取数据。

    </Soapbox>
    

    【讨论】:

    • 存储过程正在选择将返回哪种类型的结果。我不知道在编译时返回了一组客户。可能是狗,也可能是飞机,所以我认为这行不通。我知道你从哪里来的肥皂盒,如果我能提供帮助,我通常不会使用动态 Linq 或 SQL,但这种情况的具体情况似乎确实需要它。我不在乎它是否使用 ORM,我只需要一种将数据读入 .Net 列表的方法。
    猜你喜欢
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多