首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SQL查询转换为linq等效项

将SQL查询转换为linq等效项
EN

Stack Overflow用户
提问于 2016-04-04 21:12:21
回答 1查看 64关注 0票数 0

我正试图在我的.net环境中执行一个查询,

因此,我将其转换为linq等效项,这是SQL查询

代码语言:javascript
复制
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

到目前为止,我已经转换了以下内容:

代码语言:javascript
复制
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,有没有人知道怎么做?

EN

回答 1

Stack Overflow用户

发布于 2016-04-04 21:20:53

首先,您确实希望根据这些值对nbre_jour进行分组,以便可以进行求和。

代码语言:javascript
复制
group temps.nbre_jour by ...

那么你的选择就是

代码语言:javascript
复制
select new
{
    res.Key.ressourec_text1,
    res.Key.annee_saisie,
    ...
    GiveThisAName = res.Sum()/8
}

想象一下Linq的小组是这样的

分组依据

在有多个要聚合的列的情况下,它将需要聚合函数中的lambda,如下所示

代码语言:javascript
复制
group  new { col1, col2 } by ... into grp
select new 
{ 
    grp.Key, 
    Col1Sum = grp.Sum(x => x.col1), 
    Col2Avg = grp.Average(x => x.col2) 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36403676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档