2011-08-23 25 views
0

你好,我需要連接兩個表(MainTransaction和子事務),這裏的問題是我還希望獲得所有Maintransaction的,這不是在子事務的記錄,我被困在這部分,如何能我做到了?Linq的語法加入和組

protected object SelectMainTbl() 
{ 
    var mainIdAndSum = from st in t.subtransaction 
         group st by st.MainTransactionId into g 
         select new 
         { 
          Sum = (from r in g 
            select r.Amount).Sum(), 
          MainId = g.Key 
         }; 

    var mainTbl = from main in t.maintransaction 
        join sub in mainIdAndSum on main.MainTransactionId equals sub.MainId 
        where main.IsEnabled == true && (sub.Sum - main.Amount != 0) 
        select main; 

    return mainTbl; 
} 

回答

1

我想這是你想要的查詢:

from mt in t.maintransaction 
join st in t.subtransaction 
    on mt.MainTransactionId equals st.MainTransactionId 
    into sts 
where mt.IsEnabled 
where sts.Sum(x => x.Amount) - mt.Amount != 0 
select new 
{ 
    MainTransaction = mt, 
    Subtransactions = sts, 
}; 
+0

嗨感謝您的回答, 不過,我想實現的是類似SQL左連接。即使SubTransaction表沒有插入maintransactionId,結果也必須返回Maintransaction表的所有記錄,並且子操作表的那些列將在結果中填充爲null。 SELECT * FROM maintransaction m LEFT JOIN subsnsaction s ON m.MainTransactionId = s.MainTransactionId – William

+0

@ user660810 - 是的,這就是我的查詢所做的。 「進入sts」就是這樣做的。如果沒有關聯的子事務,那麼'sts'將是一個空列表,並且您仍然會從查詢返回主事務。 – Enigmativity

+0

我一直有類似的問題,並且'into'只能和'group join'一起使用。據我瞭解,「join」與sql內部連接相關,「group join」與sql左連接粗略相關。 – pseudocoder