У меня есть хранимая процедура, которую я пытаюсь вызвать с помощью LINQ to SQL, вот хранимая процедура:
ALTER procedure [dbo].[sp_SELECT_Security_ALL] (
@UID Varchar(15)
)
as
DECLARE @A_ID int
If ISNULL(@UID,'') = ''
SELECT DISTINCT
App_ID,
App_Name,
App_Description,
DB,
DBNameApp_ID,
For_One_EVA_List_Ind
From v_Security_ALL
ELSE
BEGIN
Select @A_ID = (Select Assignee_ID From NEO.dbo.v_Assignees Where USER_ID = @UID and Inactive_Ind = 0)
SELECT DISTINCT
Security_User_ID,
Security_Company,
Security_MailCode,
Security_Last_Name,
Security_First_Name,
Security_User_Name,
Security_User_Info,
Security_User_CO_MC,
Security_Email_Addr,
Security_Phone,
Security_Security_Level,
Security_Security_Desc,
Security_Security_Comment,
Security_Security_Inactive_Ind,
App_ID,
App_Name,
App_Description,
DB,
DBNameApp_ID,
For_One_EVA_List_Ind,
@A_ID as Assignee_ID
From v_Security_ALL
Where Security_User_ID = @UID
END
Моя проблема в том, что intellsense видит только первый набор возвращаемых значений в операторе IF, и я не могу получить доступ ни к чему из части «else» моей хранимой процедуры. поэтому, когда я пытаюсь сделать это:
var apps = dataContext.sp_SELECT_Security_ALL(userId);
foreach (var app in apps)
{
string i = app.
}
В приложении. часть единственные доступные значения, которые у меня есть, это результаты первого Select отличного выше.
Можно ли использовать LINQ с этим типом хранимой процедуры?





Проблема не в Intellisense. dataContext.sp_SELECT_Security_ALL() возвращает фиксированный тип данных. Вы можете скрывать это за «var», но, тем не менее, это конкретный тип с фиксированным количеством свойств. Еще есть C#, помните, и функция может возвращать только один тип объекта. Загляните в свой файл dataContext.designer.cs, чтобы увидеть, как он на самом деле определен.
Скотт Гатри рассмотрел это дело в сообщении в блоге. Прокрутите вниз до «Обработка нескольких результирующих фигур из SPROC».
Быстрый и грязный способ исправить это - заставить каждый оператор возврата возвращать одно и то же:
IF @theSkyIsBlue
SELECT CustomerNumber, CustomerName, null as OrderNumber, null as OrderName
FROM Customers
ELSE
SELECT null as CustomerNumber, null as CustomerName, OrderNumber, OrderName
FROM Orders
Возможно, вам придется посмотреть / (изменить вручную) возможность пустых значений свойств в сопоставленном типе, но это приведет вас туда, куда вы собираетесь.