2012-01-16 187 views
0

我卡住了,有人給我推一下。轉換SQL查詢/子查詢LINQ(VB)

這裏是我的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

例如,我想從事件表獲得最大EvDateEnd每個記錄在tblEquip中,但並非tblEquip中的所有記錄都有「REG」事件,而其他記錄有多個REG事件。

某些事件(如EAE)我將tblEvent.EvDateEnd字段留空以顯示事件是開放和正在進行的,例如向員工(實體)發放車輛。當車輛返回時,我在EvDateEnd中輸入日期,基本上關閉事件。

回答

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)