如何将sql union转换为linq

我有一个使用union的以下Transact SQL查询。 我需要一些关于如何在LINQ中看起来的指针,即一些例子会很好或者如果有人可以在linq中推荐一个关于UNIONS的好教程。

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 

请注意,原始SQL正在合并 2个选择NOT连接它们。 我需要知道如何合并结果,即删除重复项,并根据条形码对存在重复的行数值求和。

三个有用的Linq概念在集合上运行。 给定集合c和集合e

Concat为您提供ce所有内容:

 (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) 

Union还为您提供ce所有内容,但删除了所有重复内容:

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

除了给你c中不是e所有东西:

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

这是一个通用联合的示例,不考虑您发布的场景:

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

有101个Linq样本 – 有两个联合样本Union1和Union2

这个Linq语句应该会得到与SQL相同的结果:(它在测试记录集中对我有用)

 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) });