我成功地使用了一些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
答案 0 :(得分: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))