У меня есть следующее, Проводят SQL-запрос с помощью объединения. Мне нужны некоторые указатели относительно того, как это выглядело бы в LINQ т.е. некоторых примерах, потенциальных хорошим или если кто-либо может рекомендовать хорошее учебное руководство на ОБЪЕДИНЕНИЯХ в 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
Обратите внимание, что исходный SQL объединяется, эти 2 выбирает не конкатенацию их. Я должен знать, как объединить результаты т.е. удаляющие дубликаты и подведение итогов значения суммы строк, где существует дублирование на основе штрихкода.
Вот пример общего объединения без учета сценария, который вы размещено:
var something =
(from e in _repository
select new { e.Property1, e.Property2 }).Union(
(from e in _repository
select new { e.Property1, e.Property2 }));
Три полезные концепции Linq, работающие с наборами. Учитывая набор c
и набор e
:
Concat дает вам все в c
или 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)
Union также дает вам все в c
и e
, но удаляются все дубликаты:
(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)
Есть 101 Linq Samples - с двумя образцами объединения 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)
});