повторное использование переменной linq - PullRequest
0 голосов
/ 28 мая 2019

Я успешно использую некоторые 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

1 Ответ

1 голос
/ 28 мая 2019

Используя правильное определение для 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...