LINQ to entities, joindre deux tables, puis de les regrouper et de prendre les sommes des colonnes de deux tables
Comme le titre le dit, mon but est de JOINDRE deux tables (de la cible et de transaction) sur plusieurs colonnes, puis du groupe le résultat de la jointure et la somme des valeurs des colonnes de DEUX tables. La requête suivante permet uniquement l'accès aux colonnes de la PREMIÈRE table dans le rejoindre!
var actualsVsTargets = (from target in ObjectContext.PipelineTargets
join transaction in ObjectContext.Transactions on
new
{
target.Year,
target.Quarter,
target.StateID,
target.ProductGroup.TeamId
} equals new
{
transaction.Year,
transaction.Quarter,
transaction.StateID,
transaction.Product.ProductGroup.TeamId
}
where target.Year == year && target.ProductGroup.TeamId == teamId
group target by new
{
target.ProductGroupID,
target.StateID,
target.Year
}
into targetGroup
select new
{
//this works fine (accessing target column)
TargetL1 = targetGroup.Sum(target => target.Level1_Target,
//this doesn't work (accessing transaction column)
ActualL1 = targetGroup.Sum(trans => trans.Level1_Total)
}).SingleOrDefault();
Comme indiqué ci-dessous, c'est trivial à mettre en T-SQL, (à peu près):
SELECT
targets.Year,
targets.StateID,
SUM(targets.Level1_Target) L1_Target, -- get the sum of targets
SUM(transactions.Level1_Total) L1_Total -- get the sum of transactions
FROM PipelineTargets targets
JOIN Transactions transactions
JOIN Products prods ON
transactions.ProductID = prods.ProductID
ON
targets.Year = transactions.Year and
targets.Quarter = transactions.Quarter and
targets.StateID = transactions.StateID and
prods.ProductGroupID = targets.ProductGroupID
WHERE targets.Year = '2010' and targets.StateID = 1
GROUP BY targets.Year, targets.StateID, targets.ProductGroupID
Comment dois-je faire dans LINQ?
OriginalL'auteur Daniel Coffman | 2011-02-22
Vous devez vous connecter pour publier un commentaire.
la transaction variable est hors de portée. Si vous l'incluez dans vous regroupées résultat, alors vous pouvez l'utiliser.
vous changer clause group by pour:
et puis votre clause select:
OriginalL'auteur saus
Tout d'abord, vous devez configurer les propriétés de navigation pour les clés étrangères (par exemple, 1:N à la relation de la cible pour les transactions, ainsi que de transaction de produits). Si le programme d'installation correctement, la conception de base de données/EF schéma doit prendre la plupart du travail de vos mains. Après cela, vous pouvez aller:
Cependant, je ne pourrais pas le tester, donc il y aura peut-être des erreurs.
OriginalL'auteur Femaref