2007-10-06

Except

Der Except-Operator liefert die Differenz der zwei Element-Mengen als Resultat zurück. Es werden Elemente zurückgeliefert, welche in der zweite Element-Menge nicht existieren. In dem Resultat werden die Werte ähnlich wie beim DISTINCT-Befehl im SQL reduziert, in dem dem mehrfach vorkommenden Werte im Resultat nur einmal zurückgeliefert werden.

Lambda Expression-Anweisung
Mit erster Lambda-Expression werden die SalesTerritories-Daten mit dem CountryRegionCode US und in die territoriesUs-Variable gespeichert. In der zwei Expression werden nur die SalesTerritories-Daten als Resultat zurückgeliefert, welche die SalesTerritories der ersten Lambda-Expression nicht enthalten. Dabei wird die territoriesUs-Variable an Except-Operator als Parameter übergegeben.

Lambda Expression

Alle SalesTerritories-Einträge ermitteln wir mit folgender Lambda Expression:
var territories = _db.SalesTerritories
.Select(t => t);


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


SalesTerritories, welche nicht den CountryRegionCode US haben:
var territoriesNotUs = _db.SalesTerritories
.Except(territoriesUs)
.Select(tnus => tnus);


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]
-- 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].[CountryRegionCode] = @p0
-- @p0: Input String (Size = 2; Prec = 0; Scale = 0) [US]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1


SELECT [t1].[TerritoryID], [t1].[Name], [t1].[CountryRegionCode], [t1].[Group], [t1].[SalesYTD], [t1].[SalesLastYear], [t1].[CostYTD], [t1].[CostLastYear], [t1].[rowguid], [t1].[ModifiedDate]
FROM (
SELECT DISTINCT [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]
) AS [t1]
WHERE NOT (EXISTS(
SELECT NULL AS [EMPTY]
FROM [Sales].[SalesTerritory] AS [t2]
WHERE ([t1].[TerritoryID] = [t2].[TerritoryID]) AND ([t2].[CountryRegionCode] = @p0)
))
-- @p0: Input String (Size = 2; Prec = 0; Scale = 0) [US]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1

No comments: