как преобразовать sql объединение в linq

У меня есть следующее, Проводят 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 выбирает не конкатенацию их. Я должен знать, как объединить результаты т.е. удаляющие дубликаты и подведение итогов значения суммы строк, где существует дублирование на основе штрихкода.

26
задан casperOne 29 February 2012 в 04:10
поделиться

3 ответа

Вот пример общего объединения без учета сценария, который вы размещено:

var something =
                (from e in _repository
                 select new { e.Property1, e.Property2 }).Union(
                (from e in _repository
                 select new { e.Property1, e.Property2 }));
12
ответ дан 28 November 2019 в 07:00
поделиться

Три полезные концепции 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)
36
ответ дан 28 November 2019 в 07:00
поделиться

Есть 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)
                });
5
ответ дан 28 November 2019 в 07:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: