我试图在我的.net环境中执行查询,
所以我将它转换为linq等价物,这就是SQL查询
SELECT
INFOCENTRE.dbo.issi_ressource.ressourec_text1,
INFOCENTRE.dbo.issi_temps.annee_saisie,
INFOCENTRE.dbo.issi_temps.mois_saisi,
INFOCENTRE.dbo.issi_temps.semaine_saisie,
INFOCENTRE.dbo.issi_temps.jour_saisi,
INFOCENTRE.dbo.issi_engagement.engagement_nom,
INFOCENTRE.dbo.issi_projet.projet_nom,
INFOCENTRE.dbo.issi_tache.tache_nom,
(sum(INFOCENTRE.dbo.issi_temps.nbre_jour))/8
FROM
INFOCENTRE.dbo.issi_ressource INNER JOIN INFOCENTRE.dbo.issi_temps ON (INFOCENTRE.dbo.issi_temps.ressource_id=INFOCENTRE.dbo.issi_ressource.ressource_id)
INNER JOIN INFOCENTRE.dbo.issi_tache ON (INFOCENTRE.dbo.issi_temps.tache_id=INFOCENTRE.dbo.issi_tache.tache_id)
INNER JOIN INFOCENTRE.dbo.issi_projet ON (INFOCENTRE.dbo.issi_projet.projet_id=INFOCENTRE.dbo.issi_tache.projet_id)
INNER JOIN INFOCENTRE.dbo.issi_engagement ON (INFOCENTRE.dbo.issi_projet.engagement_id=INFOCENTRE.dbo.issi_engagement.engagement_id)
WHERE
(
INFOCENTRE.dbo.issi_tache.tache_nom NOT IN ('Control for Complement day or week', 'Holidays (for internal only)', 'Miscellaneous absences (for internal only)', 'Part time (for internal only)', 'Sick time and job injuries (for internal only)')
AND INFOCENTRE.dbo.issi_ressource.ressourec_text1 = 'EDCL'
AND INFOCENTRE.dbo.issi_temps.jour_saisi >= '2016-03-01'
AND INFOCENTRE.dbo.issi_temps.jour_saisi < '2016-04-01'
)
GROUP BY
INFOCENTRE.dbo.issi_ressource.ressourec_text1,
INFOCENTRE.dbo.issi_temps.annee_saisie,
INFOCENTRE.dbo.issi_temps.mois_saisi,
INFOCENTRE.dbo.issi_temps.semaine_saisie,
INFOCENTRE.dbo.issi_temps.jour_saisi,
INFOCENTRE.dbo.issi_engagement.engagement_nom,
INFOCENTRE.dbo.issi_projet.projet_nom,
INFOCENTRE.dbo.issi_tache.tache_nom
并转换到目前为止我有以下内容:
from ressource in context.issi_ressource
join temps in context.issi_temps on ressource.ressource_id equals temps.ressource_id
join tache in context.issi_tache on temps.tache_id equals tache.tache_id
join projet in context.issi_projet on tache.projet_id equals projet.projet_id
join engagement in context.issi_engagement on projet.engagement_id equals engagement.engagement_id
where
ressource.ressourec_text1 == "EDCK" &&
temps.jour_saisi <= new DateTime(2016, 03, 01) &&
temps.jour_saisi < new DateTime(2016, 04, 01) &&
tache.tache_nom != "Control for Complement day or week" &&
tache.tache_nom != "Holidays (for internal only)" &&
tache.tache_nom != "Miscellaneous absences (for internal only)" &&
tache.tache_nom != "Part time (for internal only)" &&
tache.tache_nom != "Sick time and job injuries (for internal only)"
group ressource by new {
ressource.ressourec_text1,
temps.annee_saisie,
temps.mois_saisi,
temps.semaine_saisie,
temps.jour_saisi,
engagement.engagement_nom,
projet.projet_nom,
tache.tache_nom
} into res
select res;
但是现在我试图将nbre_jour
总和除以8,有没有人知道如何做到这一点?
答案 0 :(得分:0)
首先,您确实希望按这些值对nbre_jour
进行分组,以便您可以进行总和。
group temps.nbre_jour by ...
然后你的选择就是
select new
{
res.Key.ressourec_text1,
res.Key.annee_saisie,
...
GiveThisAName = res.Sum()/8
}
想想Linq的小组就像这样
组&lt;您要汇总的内容&gt; by&lt;您想要分组的列&gt;
如果要聚合多个列,则需要在聚合函数中使用lambda
group new { col1, col2 } by ... into grp
select new
{
grp.Key,
Col1Sum = grp.Sum(x => x.col1),
Col2Avg = grp.Average(x => x.col2)
}