2007-10-07

Union

Der Union-Operator gibt Elemente als Resultat zurück, welche entweder bei der erste Quelle oder zweite Quelle vorkommen. Die Elemente, welche in beiden Quellen vorkommen, werden nur als ein Element im Resultat dargestellt. Dieser Operator kann mit dem Distinct-Operator verglichen werden, welche auf beiden Resultate ausgeführt wird.

Query Expression
Wir ermitteln zuerst alle SalesTerritories-Daten mit der CountryRegionCode US und den Resultat speichern wir in die territoriesUs-Variable.

var territoriesUs = _db.SalesTerritories
.Where(tus => tus.CountryRegionCode == "US")
.Select(tus => tus);

Im zweiten Schritt ermitteln wir alle SalesTerritories, die den Group-Wert North America entsprechen und speichern das Resultat in die TerritoriesNorthAmerica-Variable.

var territoriesNorthAmerica = _db.SalesTerritories
.Where(tna => tna.Group == "North America")
.Select(tna => tna);

In den dritten Schritten ermitteln wir alle salesTerritories, welche im ersten Resultat vorkommen und im zweiten Resultat vorkommen aber im Resultat nicht vorhanden sind und speichern das Resultat in die territories-Variable.

var territories = territoriesUs
.Union(territoriesNorthAmerica);


SQL-Anweisung
SELECT [t0].[TerritoryID],
[t0].[Name],
[t0].[CountryRegionCode],
[t0].[Group] AS [Group],
[t0].[SalesYTD],
[t0].[SalesLastYear],
[t0].[CostYTD],
[t0].[CostLastYear],
[t0].[rowguid],
[t0].[ModifiedDate]
FROM [Sales].[SalesTerritory] AS [t0]
WHERE [t0].[CountryRegionCode] = @p0
-- @p0: Input String (Size = 2; Prec = 0; Scale = 0) [US]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1

SELECT [t0].[TerritoryID],
[t0].[Name],
[t0].[CountryRegionCode],
[t0].[Group] AS [Group],
[t0].[SalesYTD],
[t0].[SalesLastYear],
[t0].[CostYTD],
[t0].[CostLastYear],
[t0].[rowguid],
[t0].[ModifiedDate]
FROM [Sales].[SalesTerritory] AS [t0]
WHERE [t0].[Group] = @p0
-- @p0: Input String (Size = 13; Prec = 0; Scale = 0) [North America]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1

SELECT [t2].[TerritoryID],
[t2].[Name], [t2].[CountryRegionCode],
[t2].[Group],
[t2].[SalesYTD],
[t2].[SalesLastYear],
[t2].[CostYTD],
[t2].[CostLastYear],
[t2].[rowguid],
[t2].[ModifiedDate]
FROM (
SELECT [t0].[TerritoryID],
[t0].[Name],
[t0].[CountryRegionCode],
[t0].[Group] AS [Group],
[t0].[SalesYTD],
[t0].[SalesLastYear],
[t0].[CostYTD],
[t0].[CostLastYear],
[t0].[rowguid],
[t0].[ModifiedDate]
FROM [Sales].[SalesTerritory] AS [t0]
WHERE [t0].[CountryRegionCode] = @p0
UNION
SELECT [t1].[TerritoryID],
[t1].[Name],
[t1].[CountryRegionCode],
[t1].[Group] AS [Group],
[t1].[SalesYTD],
[t1].[SalesLastYear],
[t1].[CostYTD],
[t1].[CostLastYear],
[t1].[rowguid],
[t1].[ModifiedDate]
FROM [Sales].[SalesTerritory] AS [t1]
WHERE [t1].[Group] = @p1
) AS [t2]
-- @p0: Input String (Size = 2; Prec = 0; Scale = 0) [US]
-- @p1: Input String (Size = 13; Prec = 0; Scale = 0) [North America]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1

No comments: