将SQL查询/子查询转换为LINQ(VB)

将SQL查询/子查询转换为LINQ(VB),sql,vb.net,linq,Sql,Vb.net,Linq,我卡住了,请有人推我一下 这是我的SQL查询 SELECT EqID, MakeID, Model, Description, (SELECT MAX(EvDateEnd) AS MaxOfDateEnd FROM tblEvent WHERE (EqID = tblEquip.EqID) AND (Event = 'REG')) AS RegExpire, (SELECT Entity FROM tblEvent AS tblEvent_3 WHERE (EqID = t

我卡住了,请有人推我一下

这是我的SQL查询

SELECT EqID, MakeID, Model, Description,
   (SELECT MAX(EvDateEnd) AS MaxOfDateEnd
     FROM tblEvent WHERE (EqID = tblEquip.EqID) AND (Event = 'REG')) AS RegExpire,
   (SELECT Entity FROM tblEvent AS tblEvent_3 WHERE (EqID = tblEquip.EqID) AND(Event = N'EAE') AND (EvDateEnd IS NULL)) AS IssuedTo
FROM tblEquip
为什么我要这样做,如果有更好的办法,我洗耳恭听

tblEquip列出设备行,EqID是PK tblEvent列出了许多与设备相关的事件,EqID是FK

例如,我希望从Events表中为tblEquip中的每个记录获取Max EVDATEND,但并非tblEquip中的所有记录都具有“REG”事件,而其他记录具有多个REG事件

某些事件(如EAE)我将tblEvent.EvDateEnd字段留空,以显示事件已打开且正在进行,例如向员工(实体)发放车辆。当车辆返回时,我在EVDATEND中输入基本结束事件的日期。

使用,我获得此输出。因为您以两种不同的方式加入到
tblEquip
,并且我假设第二种方法将保证返回0或1行,那么这种格式就和您得到的一样好了

from tblequip in db.TblEquip
select new {
  tblequip.EqID,
  tblequip.MakeID,
  tblequip.Model,
  tblequip.Description,
  RegExpire = 
    (from tblevent in db.TblEvent
    where
      tblevent.EqID == tblequip.EqID &&
      tblevent.Event == "REG"
    select new {
      tblevent.EvDateEnd
    }).Max(p => p.EvDateEnd),
  IssuedTo = (System.Int32?)
    ((from tblevent_3 in db.TblEvent
    where
      tblevent_3.EqID == tblequip.EqID &&
      tblevent_3.Event == "EAE" &&
      tblevent_3.EvDateEnd == null
    select new {
      tblevent_3.Entity
    }).First().Entity)