Повторное использование переменной linq

Я успешно использую некоторый linq для заполнения некоторых переменных, но для того, чтобы сделать его более эффективным, я хотел бы избежать текущего повторения при установке переменных nextMDTID, nextPatientID, nextCareID и nextMDTDate. Могу ли я создать переменную для хранения данных, сгенерированных с помощью запроса linq, а затем повторно использовать ее, чтобы избежать повторения?

    Dim thisPTOrder = (From p In ThisMDTData Where p.MDTID = Request.QueryString("MDTID") Select p.PTOrder).FirstOrDefault
    Dim nextPTOrder = thisPTOrder + 1
    Dim d = ThisMDTData.Where(Function(p) p.PTOrder = nextPTOrder And p.PTOrder <= p.PTOrder)
    Dim nextMDTID = (From p In ThisMDTData Where p.PTOrder = nextPTOrder And p.PTOrder <= p.MaxPTOrder Select p.MDTID).FirstOrDefault
    Dim nextPatientID = (From p In ThisMDTData Where p.PTOrder = nextPTOrder And p.PTOrder <= p.MaxPTOrder Select p.PatientID).FirstOrDefault
    Dim nextCareID = (From p In ThisMDTData Where p.PTOrder = nextPTOrder And p.PTOrder <= p.MaxPTOrder Select p.CareID).FirstOrDefault
    Dim nextMDTDate = (From p In ThisMDTData Where p.PTOrder = nextPTOrder And p.PTOrder <= p.MaxPTOrder Select p.MDTDate).FirstOrDefault

Определить это как старомодную функцию и вызывать ее при желании?

MarkL 28.05.2019 19:28

Что такое nextPTOrder?

Ofiris 28.05.2019 19:28

@Ofiris это просто переменная, которая условно увеличивается на 1

Paul Stevens 28.05.2019 19:47

@Ofiris Я обновил вопрос, который может помочь, а может и не помочь.

Paul Stevens 28.05.2019 20:12

Почему вы думаете, что это было бы «эффективнее»? Потому что это не имело бы значения.

Henk Holterman 28.05.2019 20:14

@HenkHolterman хорошо, может быть, было бы не более эффективно, если бы повторение не выглядело элегантно

Paul Stevens 28.05.2019 20:43

Вы можете сделать это проще с синтаксисом лямбда, но вы можете сделать это. Если ThisMDTData из базы данных, существует компромисс между возвратом большего количества данных, чем необходимо, и четырехкратным запросом к базе данных. Что такое ThisMDTData? PS Вы уже определили d - почему не используете?

NetMage 28.05.2019 21:05

@NetMage Я бы хотел использовать d в последующих объявлениях переменных, но мне не нравится мой синтаксис, так что же делать?

Paul Stevens 28.05.2019 21:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используя правильное определение для d, вы можете упростить извлечение результатов:

Dim d = ThisMDTData.Where(Function(p) p.PTOrder = nextPTOrder And p.PTOrder <= p.MaxPTOrder).Select(Function(p) New With { p.MDTID, p.PatientID, p.CareID, p.MDTDate }).FirstOrDefault
Dim nextMDTID = d?.MDTID
Dim nextPatientID = d?.PatientID
Dim nextCareID = d?.CareID
Dim nextMDTDate = d?.MDTDate

Добавление Select/FirstOrDefault к определению d гарантирует, что любая база данных будет запрашиваться только один раз для получения минимально необходимых данных. Вы можете оставить Select выключенным, если размер строки небольшой или строка имеет только эти четыре свойства. При желании вы можете использовать очевидный беглый перевод запроса для d.

ПРИМЕЧАНИЕ. Если вы не хотите, чтобы некоторые переменные были Nullable, используйте If:

Dim nextPatientID = If(d?.PatientID, CType(Nothing, Integer))

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