Почему linq не может получить значения временной таблицы - PullRequest
1 голос
/ 13 апреля 2011

работа на C # vs2008 . У меня есть хранимая процедура, эта процедура содержит временную таблицу, мне нужно получить значения временной таблицы. Мой SQL-запрос ниже:

create procedure [dbo].[TestProcedure]
as

SELECT * INTO #temp1 from(select * from DischargePort) as b

select * from #temp1

drop table #temp1

Мой запрос выше имеет временную таблицу с именем # temp1.После выполнения этого запроса в sql-server-management я получаю результат, но когда я пытаюсь выполнить эту процедуру в linq, я не получаю результат. Мой синтаксис linq ниже:

 var r = ProviderName.TestProcedure();

Может кто-нибудь сказать мне, почему возникает эта проблема, Как преодолеть эту проблему. Надеюсь, что любой орган не скажет, что linq не может обработать временную таблицу или такого рода слова. Если есть какие-либо запросы, пожалуйста, спросите.

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

Я не думаю, что это как-то связано с временной таблицей, а скорее потому, что Linq не знает, какой результат ожидать.

С Dotnet Framework 4 это легко, как вы можете сделатьчто-то вроде

 (from r in ProviderName.TestProcedure().AsDynamic() 
       select new { r.Id, r.Description}).ToList()

(предполагается, что Id и description являются полями в DischargePort)

В противном случае вам нужно что-то сделать в конструкторе, чтобы сообщить Linq, что выводит ваша процедура.Мне никогда не приходилось это делать, но, возможно, эта статья поможет.

Когда я думаю об этом, в данном конкретном случае вы должны быть в состоянии сделать что-то вроде

var results = (from r in ExecuteQuery<DischargePort>("exec TestProcedure") 
select  r ).ToList();
0 голосов
/ 13 апреля 2011

Я бы начал с загрузки linqpad , чтобы увидеть sql, который выдает linq, это может дать некоторые подсказки. Вы также можете использовать средство профилирования sql, чтобы увидеть, какой запрос выполняется.

...