Я успешно использую некоторый 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
Что такое nextPTOrder
?
@Ofiris это просто переменная, которая условно увеличивается на 1
@Ofiris Я обновил вопрос, который может помочь, а может и не помочь.
Почему вы думаете, что это было бы «эффективнее»? Потому что это не имело бы значения.
@HenkHolterman хорошо, может быть, было бы не более эффективно, если бы повторение не выглядело элегантно
Вы можете сделать это проще с синтаксисом лямбда, но вы можете сделать это. Если ThisMDTData
из базы данных, существует компромисс между возвратом большего количества данных, чем необходимо, и четырехкратным запросом к базе данных. Что такое ThisMDTData
? PS Вы уже определили d
- почему не используете?
@NetMage Я бы хотел использовать d в последующих объявлениях переменных, но мне не нравится мой синтаксис, так что же делать?
Используя правильное определение для 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))
Определить это как старомодную функцию и вызывать ее при желании?