web-dev-qa-db-ja.com

SQLユニオンをlinqに変換する方法

ユニオンを使用した次の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はmergingであることに注意してください。2はそれらを連結しないことを選択します。結果をマージする方法、つまり重複を削除し、バーコードに基づいて重複がある行の値を合計する方法を知る必要があります。

28
lowlyintern

セットで動作するLinqの3つの便利な概念。与えられたセット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は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)
36
Amit Rai Sharma

投稿したシナリオに関係なく、一般的なユニオンの例を次に示します。

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

101 Linq Samples -2つのユニオンサンプル nion1 および nion2 があります。

この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
Nicholas Murray