Динамически создать предложение WHERE в Razor Page Linq - PullRequest
0 голосов
/ 17 апреля 2019

Я вижу все виды примеров, которые не соответствуют моему сценарию.Я не знаю, как я заставил свой LINQ работать, чтобы загрузить индексное представление всех строк.Но теперь я хочу отфильтровать строки.Я могу жестко закодировать предложение WHERE, которое сделает это.Однако мне нужно динамически создавать предложение WHERE во время выполнения, что я делал много раз на других языках.

Courses = await _context.Courses
    .Select(p => new CoursesVM
    {
        OESACID = p.OESACID,
        CourseTitle = p.CourseTitle,
        Instructor = p.Instructor,
        Locations = p.Locations,
        Dates = p.Dates,
        CEUDWP = p.CEUDWP,
        CEUDEQ = p.CEUDEQ,
        CEUonsiteInstall = p.CEUonsiteInstall,
        CEUonsiteOandM = p.CEUonsiteOandM,
        MaxCEU = p.MaxCEU,
        SponsorID = p.SponsorID,
        MrMs = p.MrMs,
        CurrentContactName = p.CurrentContactName,
        ContactBizName = p.ContactBizName,
        ContactAddress = p.ContactAddress,
        ContactCity = p.ContactCity,
        ContactState = p.ContactState,
        ContactZip = p.ContactZip,
        CurrentContactPhone = p.CurrentContactPhone,
        CurrentContactFax = p.CurrentContactFax,
        CurrentContactEmail = p.CurrentContactEmail,
        DateRec = p.DateRec,
        FeeRec = p.FeeRec,
        CheckNumber = p.CheckNumber,
        PrelimAprvDate = p.PrelimAprvDate,
        MailedReceipt = p.MailedReceipt,
        FinalAprvDate = p.FinalAprvDate,
        MailedFinal = p.MailedFinal,
        HomeStudy = p.HomeStudy,
        Recurring = p.Recurring,
        PutOnCommitteeList = p.PutOnCommitteeList,
        FinalLetterSent = p.FinalLetterSent,
        URL = p.URL,
        //ThreeYearLetterSent = p.ThreeYearLetterSent,
        TakeOffWeb = p.TakeOffWeb,
        Inactive = p.Inactive
    }).Where(p => [FieldName]!= null && p.FinalAprvDate >= threeYearsAgo).OrderByDescending(p => p.OESACID).ToListAsync();

Обратите внимание на [FieldName] в скобках.Это то, что я пытаюсь динамически изменить.В зависимости от того, что отправляется из списка выбора.Если этот параметр выбран, то я хочу, чтобы предложение WHERE возвращало только те строки, в которых этот столбец не равен NULL:

public async Task OnGetAsync(String CEUType)
enter code here
   switch(CEUType)
        {
            case "DWP":
    what goes here???
                break;
            case "DEQ":
    what goes here???
                break;

            case "OnSite":
    what goes here???
                break;
            case "HomeStudy":
    what goes here???
                break;
        }

Я не уверен, как это сделать.Мой запрос Linq немного отличается от всех примеров тем, что в конце находится предложение WHERE.

Существует 4 типа CEU.Можно выбрать из выпадающего списка.Затем код должен использовать столбец с этим типом, чтобы проверить, если! = Null.

1 Ответ

0 голосов
/ 17 апреля 2019

Хорошо, я обнаружил, что пытался добавить еще один «.Где» (что возможно), но не возвращал iList, в который были засасаны данные.Добавив ".ToList ()" в конце моей динамической записи, я смог и смог добавить любые динамические критерии ".Where", которые я хочу.

at the top:

   Courses = await _context.Courses
                .Select(p => new CoursesVM
                {
                    OESACID = p.OESACID,
                    CourseTitle = p.CourseTitle,

at the bottom:

                }).Where(p =>  p.FinalAprvDate >= threeYearsAgo).OrderByDescending(p => p.OESACID).ToListAsync();



            switch (CEUType)
            {
                case "DWP":
                    Courses = Courses.Where(p => p.CEUDWP != null).ToList();
                    break;
                case "DEQ":

                    break;

                case "OnSite":

                    break;
                case "HomeStudy":

                    break;
            }
...