Динамический SQL Хранимый Proc для Linq to SQL - PullRequest
2 голосов
/ 10 января 2012

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

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, я открыт для всего.

1 Ответ

1 голос
/ 10 января 2012
IEnumerable<Customer> customers = dataContext.ExecuteQuery<Customer>(
  @"EXEC GetRecordsInViewPort {0},{1}", "databaseName", "Customer");

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

<Soapbox>

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

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

Вы можете использовать SqlConnection.ExecuteReader для простого извлечения данных.

</Soapbox>
...