重新使用 linq 变量

re-using a linq variable

我成功地使用了一些 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

使用 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))