sanjaysgh Ответов: 1

Если условие else не работает в запросе linq


У меня есть этот код :

var vr = (from s in context.GRI_Package
                              //where (ISSTUDENT == true ? s.StudentID == StudentUserID : s.TutorUserID == TutorUserID)
                              //where (ISSTUDENT == true ? s.StudentID == StudentUserID : (s.TutorUserID == TutorUserID && s.StudentID == StudentUserID))
                              where (ISSTUDENT == true ? (s.TutorUserID == 0 || s.StudentID == StudentUserID) : (s.TutorUserID == TutorUserID && s.StudentID == StudentUserID))
                              //where s.TutorUserID == TutorUserID && s.StudentID == StudentUserID
                              select new GetSessionpackageInfo
                              {
                                  PackageID = s.PackageID,

}).Список();

ВР.Дамп();

здесь, если еще условие не просыпается, есть ли какая-то синтаксическая ошибка ?
пожалуйста, помогите мне

Что я уже пробовал:

Я попробовал это условие
где (ISSTUDENT == правда ? (С. TutorUserID == 0 || С. StudentID == StudentUserID) : (сек.TutorUserID == TutorUserID &амп;&амп; ы.StudentID == StudentUserID))

Richard MacCutchan

Предложение WHERE сводится к True или False,и первое выражение выглядит supect. Ты этого хочешь?

Maciej Los

Правильное использование ? оператор[^] есть: condition ? first_expression : second_expression;
Видеть: ?: Оператор (Ссылка На C# )[^]
Итак, чего вы пытались достичь?

1 Ответов

Рейтинг:
1

Tomas Takac

Проблема заключается в том, что вы пытаетесь использовать процедурную логику потока управления в предложении where. Вы должны понимать, что то, что находится в предложении WEHRE, является логическим выражением, а не оператором.

Я объясню вам одну из ваших более ранних и простых попыток, которую вы прокомментировали. У вас есть два варианта. Более естественным для вас было бы, возможно, сделать IF в коде C# вот так:

var query = context.GRI_Package;
if (ISSTUDENT)
{
    query = query.Where(s => s.StudentID == StudentUserID);
}
else
{
    query = query.Where(s => s.TutorUserID == TutorUserID);
}
var vr = query.Select(s => new GetSessionpackageInfo {PackageID = s.PackageID}).ToList();

Или вы можете иметь все это в предложении where но тогда это должен быть логический экспрессон а не оператор:
var vr = (from s in context.GRI_Package
          where (ISSTUDENT == true  && s.StudentID == StudentUserID) 
             || (ISSTUDENT == false && s.TutorUserID == TutorUserID)
          select new GetSessionpackageInfo
          {
              PackageID = s.PackageID,
          }).ToList();