将SQL查询/子查询转换为LINQ(VB)
我卡住了,请有人推我一下 这是我的SQL查询将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
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)