2012-01-21 3 views
0

ASP.NET MVC, VB.NET, SQL Server 2008 R2, Entity Framework v4Как получить значение из хранимой процедуры?

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

PROCEDURE [dbo].[spProfileCount] 
@STARTLETTER char(1) = 'A' 
AS 
BEGIN 
    SET NOCOUNT ON 

    SELECT count(*) 
    FROM [Profils] 
    WHERE LEFT(lastname,1) = @STARTLETTER 

END 

Я импортирован хранимая процедура в EF и создал функция. В этой функции я определил Returns a collection of как скаляр типа Int32 (что согласуется с тем, что я вижу, когда нажимаю кнопку [get column information]).

Как это работает в контроллере? Я пробовал много вещей без успеха.

I.e.

Dim n As Integer = 0 
n = context.spProfileCount("Q") 

Ошибка:

Value of type System.data.Objects.ObjectResults(of integer?)' can not be converted to 'integer'.

ответ

3

Вы пробовали, что показано в документации?

ObjectResult(Of T) Class.

// Execute the query and get the ObjectResult. 
ObjectResult<Product> queryResult = query.Execute(MergeOption.AppendOnly); 

// Iterate through the collection of Product items. 
foreach (Product result in queryResult) 
    Console.WriteLine("{0}", result.Name); 

Если вы уверены, что вы будете иметь только одну строку, она будет просто queryResult.Single()

+0

нет. что ASP.NET MVC VB? Мой SP возвращает значение для счетчика SELECT (*), таким образом да: 1 значение (типа int32). – Foxbox

+0

Я попробовал context.ExecuteStoreQuery (Of Integer) («spProfileCount @ p0», «Q») (создайте его с помощью intellisesnse), но затем снова одно и то же сообщение об ошибке ... – Foxbox

+0

@Foxbox VB ASP.NET MVC не имеют отношения к ваш вопрос. Так же и EF. Важно то, что существует тип 'ObjectResults (Of integer?)', Который реализует 'IEnumerable (Of Integer?)'. Это коллекция 'Integer?'. Вы должны сказать, какой элемент этой коллекции вы хотите назначить своей переменной 'n'. Один из способов сделать это: «n = context.spProfileCount (« Q »). Single()'. Все это указано на странице документации. – GSerg

Смежные вопросы