2012-01-09 4 views
2

У меня есть хранимая процедура, которая возвращает выбор из таблицы. Таблица выбирается динамически. Процедура выглядит так:Динамический SQL хранимый Proc для Linq to SQL

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? Когда я пытаюсь выполнить его, я просто вернусь. Свойство возвращаемого типа в хранимой процедуре в конструкторе Linq-to-SQL устанавливается в (None) и не может быть изменено.

Можно ли отобразить результат хранимой процедуры на лету, а затем вернуть List<<r>dynamic>?

В двух словах, я думаю, что я хочу принять результаты хранимой процедуры как динамический список, свойства которого я могу получить во время выполнения через отражение. Есть идеи?

Кроме того, если это проще сделать в Linq-To-Entities, я открыт для чего-либо.

ответ

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

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

<Soapbox> 

Я ищу принять результаты хранимой процедуры как динамический список, свойства которого я могу получить доступ во время выполнения

Всей точкой LinqToSql заключается в построении проверенных запросов компилятора и получении результатов проверки компилятора. Если вы не хотите делать это, вы не должны использовать этот ORM.

Чтобы получить данные, вы можете использовать SqlConnection.ExecuteReader.

</Soapbox> 
+0

Хранимая процедура выбирает, какой тип результата будет возвращен. Я не буду знать, что набор клиентов возвращается во время компиляции. Это могут быть собаки, это могут быть самолеты, поэтому я не думаю, что это сработает. Я получаю, откуда вы пришли с помощью soapbox, и обычно я никогда не буду использовать динамический Linq или SQL, если я могу ему помочь, но специфика этого случая, похоже, требует этого. Я мог бы заботиться меньше, если он использует ORM или нет, мне просто нужен способ чтения данных в .Net List. –