como converter sql union para linq

Eu tenho a seguinte consulta Transact SQL usando uma união. Eu preciso de alguns pointers sobre como isso seria no LINQ, ou seja, alguns exemplos seriam bons ou se alguém pode recomendar um bom tutorial sobre UNIONS no linq.

select top 10 Barcode, sum(ItemDiscountUnion.AmountTaken) from (SELECT d.Barcode,SUM(AmountTaken) AmountTaken FROM [Aggregation].[dbo].[DiscountPromotion] d GROUP BY d.Barcode UNION ALL SELECT i.Barcode,SUM(AmountTaken) AmountTaken FROM [Aggregation].[dbo].ItemSaleTransaction i group by i.Barcode) ItemDiscountUnion group by Barcode 

Observe que o SQL original está mesclando os 2 selects NÃO concatenando-os. Eu preciso saber como mesclar os resultados ou seja, removendo duplicatas e sumndo o valor da quantidade de linhas onde há duplicação com base no código de barras.

    Três conceitos úteis do Linq operando em conjuntos. Dado conjunto c e set e :

    Concat lhe dá tudo em c ou e :

     (From c In db.Customers Select c.Phone).Concat( _ From c In db.Customers Select c.Fax).Concat( _ From e In db.Employees Select e.HomePhone) (From c In db.Customers _ Select Name = c.CompanyName, Phone = c.Phone).Concat(From e In db.Employees _ Select Name = e.FirstName & " " & e.LastName, Phone = e.HomePhone) 

    A Union também fornece tudo em c e e , mas remove quaisquer duplicatas:

     (From c In db.Customers _ Select c.Country).Union(From e In db.Employees _ Select e.Country) 

    Exceto te dá tudo em c que não está em e :

     (From c In db.Customers _ Select c.Country).Except(From e In db.Employees Select e.Country) 

    Veja um exemplo de união genérica, sem considerar o cenário que você postou:

     var something = (from e in _repository select new { e.Property1, e.Property2 }).Union( (from e in _repository select new { e.Property1, e.Property2 })); 

    Existem as 101 amostras Linq – com duas amostras de união Union1 e Union2

    Esta instrução Linq deve obter os mesmos resultados que o seu SQL: (tem para mim em um conjunto de registros de teste)

     var results = (from a in (from d in DiscountPromotions group d by d.BarCode into g select new { BarCode = g.Key, AmountTaken = g.Sum(p => p.AmountTaken) }).Union(from i in ItemSaleTransactions group i by i.BarCode into o select new { BarCode = o.Key, AmountTaken = o.Sum(i => i.AmountTaken) }) group a by a.BarCode into b select new { BarCode = b.Key, AmountTaken = b.Sum(c => c.AmountTaken) });