2011-08-23 2 views
0

Здравствуйте, мне нужно объединить две таблицы (MainTransaction и Subtransaction), проблема здесь. Я также хочу получить всю запись Maintransaction, которая не находится в Subtransaction, я застрял в этой части, как можно Я этого добиваюсь?Linq синтаксис join и group

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 Соединение слева. Результат должен вернуть всю запись таблицы Maintransaction, даже если в таблице SubTransaction не добавлен файл maintransactionId, и этот столбец для таблицы подтрансформации будет заполнен как нулевой результат. SELECT * FROM maintransaction m LEFT JOIN subtransaction s ON m.MainTransactionId = s.MainTransactionId – William

+0

@ user660810 - Да, это то, что делает мой запрос. «В sts' делает это. Если нет связанных подтранзакций, то 'sts' будет пустым списком, и вы по-прежнему будете иметь основную транзакцию, возвращаемую из запроса. – Enigmativity

+0

У меня была аналогичная проблема, и 'in' может использоваться только с' group join'. Насколько я понимаю, «join» коррелирует с внутренним соединением sql и 'group join' коррелирует с sql left join, грубо говоря. – pseudocoder