Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / странная работа LINQ с хранимой процедурой / 2 сообщений из 2, страница 1 из 1
21.10.2009, 11:55
    #36263828
bitblock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странная работа LINQ с хранимой процедурой
Всем привет.
Я использую хранимую процедуру такого вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
--выбирает нужные данные и сохраняит в #tmp2 
SELECT [INQUIRER_QUESTIONS].QUESTION_TEXT,
	   [INQUIRER_ANSWERS].ANSWER_TEXT,
	   [INQUIRER_ANSWERS].[COUNTER]
INTO #tmp2 
FROM [INQUIRER_QUESTIONS]
	LEFT JOIN [INQUIRER_ANSWERS]
		ON [INQUIRER_QUESTIONS].[ID_QUESTION] = [INQUIRER_ANSWERS].[ID_QUESTION]
WHERE 
[INQUIRER_QUESTIONS].[ID_INQUIRER] =  12  AND [INQUIRER_QUESTIONS].[ID_QUESTION] =  7 
AND [INQUIRER_QUESTIONS].[IS_ACTIVE] =  1  AND [INQUIRER_ANSWERS].[IS_ACTIVE] =  1 



--созданиет строку ответов вида [Ответ1], [Ответ2], [Ответ3],... [ОтветN]
DECLARE @strAnswers varchar(max)
DECLARE @ANSWER_TEXT varchar( 100 )
SET @strAnswers = ''
DECLARE answers_select CURSOR  FOR
	SELECT ANSWER_TEXT FROM #tmp2
	OPEN answers_select
		FETCH NEXT FROM answers_select
		INTO @ANSWER_TEXT
		WHILE (@@FETCH_STATUS <> - 1 )
		BEGIN
			SET @strAnswers = @strAnswers + '['+ @ANSWER_TEXT +'],'
			FETCH NEXT FROM answers_select
			INTO @ANSWER_TEXT
		END
	CLOSE answers_select;
DEALLOCATE answers_select;

SET @strAnswers = SUBSTRING(@strAnswers,  0 , Len(@strAnswers))

--разворачивает таблицу
DECLARE @sqlCommand varchar(max)
DECLARE @str varchar(max)
EXECUTE ('SELECT * FROM #tmp2 PIVOT ( Sum([COUNTER]) FOR [Answer_TEXT] IN ('+ @strAnswers +')) AS p')
DROP TABLE #tmp2

т.е. она делает PIVOT по некоторым данным из временной таблицы. процедура работает и при выполнении запроса в sql сервере я вижу нужную мне выборку.

затем пытаюсь вызвать эту процедуру с помощью LINQ
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
public static List<qm_Inquirer_SelectStatisticForSingleQuestionResult> SelectStatisticForSingleQuestion(int InquirerID, int QuestionID)
        {
            List<qm_Inquirer_SelectStatisticForSingleQuestionResult> t;
            using (DataAccessDataContext db = new DataAccessDataContext())
            {
                t = db.qm_Inquirer_SelectStatisticForSingleQuestion(InquirerID, QuestionID).ToList();
            }
            return t;
        }
здесь получаю ошибку. .NET говорит что нельзя преобразовать int к List<qm_Inquirer_SelectStatisticForSingleQuestionResult>
посмотрел в дизайнере.
выглядит действительно так:
Код: plaintext
1.
2.
3.
4.
5.
public int qm_Inquirer_SelectStatisticForSingleQuestion([Parameter(Name="ID_INQUIRER", DbType="Int")] System.Nullable<int> iD_INQUIRER, [Parameter(Name="ID_QUESTION", DbType="Int")] System.Nullable<int> iD_QUESTION)
		{
			IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), iD_INQUIRER, iD_QUESTION);
			return ((int)(result.ReturnValue));
		}

не понятно почему... может причина в том что во время поворота таблицы ее поля принимают названия на русском?
если кто сталкивался с подобным подскажите как обойти это.
спасибо.
...
Рейтинг: 0 / 0
21.10.2009, 19:14
    #36265340
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странная работа LINQ с хранимой процедурой
Дизайнер просто ниаслили по тексту запроса определить тип возвращаемых данных. Нужно потрепать его самостоятельно и натянуть на процедуру готовую сущность, как возвращаемый результат. Если не ошибаюсь, делается это прямо в dbml дизайнере в свойствах процедуры.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / странная работа LINQ с хранимой процедурой / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]