2012-01-16 11 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は、機器に関連する多くのイベントを示していますtblEvent PK で、EqIDは、例えばFK

ですが、私はレコードごとにイベントテーブルから最大EvDateEndを取得したいですtblEquipではtblEquipのすべてのレコードに「REG」イベントがあり、他のイベントには複数のREGイベントがあります。

一部のイベント(EAEなど)では、tblEvent.EvDateEndフィールドを空白のままにして、従業員(エンティティ)に車両を発行するなど、イベントが開いて進行中であることを示します。車両が返却されると、私はEvDateEndに日付を入力し、本質的にイベントを閉じる。

答えて

0

Linqerを使用すると、この出力が得られます。 tblEquipに2つの別々の方法で参加しています.2番目のメソッドが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) 
関連する問題