Linq to SQL, хранимая процедура с разными типами возврата на основе If / Else

У меня есть хранимая процедура, которую я пытаюсь вызвать с помощью 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 с этим типом хранимой процедуры?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
4 478
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Проблема не в 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

Возможно, вам придется посмотреть / (изменить вручную) возможность пустых значений свойств в сопоставленном типе, но это приведет вас туда, куда вы собираетесь.

Другие вопросы по теме