我被卡住了,有人请你推。
这是我的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
例如,我想从tblEquip中的每条记录的Events表中获取Max EvDateEnd,但并非tblEquip中的所有记录都有“REG”事件,而其他记录则有多个REG事件。
某些事件(如EAE)我将tblEvent.EvDateEnd字段留空以显示事件是否已打开且正在进行,例如向员工(实体)发放车辆。当车辆返回时,我在EvDateEnd中输入日期,基本上是关闭事件。
答案 0 :(得分:0)
使用Linqer,我得到了这个输出。因为您以两种不同的方式加入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)