2011-08-23 27 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