C# 将SQL查询转换为linq等效查询

C# 将SQL查询转换为linq等效查询,c#,linq,C#,Linq,我正在尝试在.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_temp

我正在尝试在.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
选择
infocenter.dbo.issi_ressource.ressourec_text1,
infocenter.dbo.issi_temps.annee_saisie,
infocenter.dbo.issi_temps.mois_saisi,
infocenter.dbo.issi_temps.semaine_saisie,
infocenter.dbo.issi_temps.jour_saisi,
infocenter.dbo.issi_engagement.engagement_nom,
infocenter.dbo.issi_projet.projet_nom,
infocenter.dbo.issi_tache.tache_nom,
(金额(信息中心、数据库、信息系统和临时数据库))/8
从…起
infocenter.dbo.issi_ressource内部连接infocenter.dbo.issi_temps ON(infocenter.dbo.issi_temps.ressource_id=infocenter.dbo.issi_ressource.ressource_id)
内部连接infocenter.dbo.issi_tache ON(infocenter.dbo.issi_temps.tache_id=infocenter.dbo.issi_tache.tache_id)
内部连接infocenter.dbo.issi_projet ON(infocenter.dbo.issi_projet.projet_id=infocenter.dbo.issi_tache.projet_id)
内部连接infocenter.dbo.issi_订婚开启(infocenter.dbo.issi_项目订婚\u id=infocenter.dbo.issi_订婚.id)
哪里
( 
infocenter.dbo.issi_tache.tache_nom不在(‘补休日或补休周控制’、‘假期(仅限内部)’、‘杂项缺勤(仅限内部)’、‘兼职(仅限内部)’、‘病假和工伤(仅限内部)’)
和infocenter.dbo.issi_ressource.ressourec_text1='EDCL'
和infocenter.dbo.issi_temps.jour_saisi>=“2016-03-01”
和infocenter.dbo.issi_temps.jour_saisi<'2016-04-01'
)
分组
infocenter.dbo.issi_ressource.ressourec_text1,
infocenter.dbo.issi_temps.annee_saisie,
infocenter.dbo.issi_temps.mois_saisi,
infocenter.dbo.issi_temps.semaine_saisie,
infocenter.dbo.issi_temps.jour_saisi,
infocenter.dbo.issi_engagement.engagement_nom,
infocenter.dbo.issi_projet.projet_nom,
infocenter.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;
来自context.issi\u ressource中的ressource
在context.issi_temps on ressource.ressource_id等于temps.ressource_id
在上下文中连接tache.issi_tache on temps.tache_id等于tache.tache_id
在context.issi_projet中加入projet在tache.projet_id等于projet.projet_id
在上下文中加入参与。issi_参与项目。参与id等于参与。参与id
哪里
ressource.ressourec_text1==“EDCK”&&

temps.jour_saisi首先,您确实希望根据这些值对
nbre____
进行分组,以便进行求和

group temps.nbre_jour by ...
那么你的选择就是

select new
{
    res.Key.ressourec_text1,
    res.Key.annee_saisie,
    ...
    GiveThisAName = res.Sum()/8
}
想想林克的团队,就像这样

group  new { col1, col2 } by ... into grp
select new 
{ 
    grp.Key, 
    Col1Sum = grp.Sum(x => x.col1), 
    Col2Avg = grp.Average(x => x.col2) 
}
分组

如果要对多个列进行聚合,则需要在聚合函数中使用lambda,如下所示

group  new { col1, col2 } by ... into grp
select new 
{ 
    grp.Key, 
    Col1Sum = grp.Sum(x => x.col1), 
    Col2Avg = grp.Average(x => x.col2) 
}

切换到Linq时,您确实应该尝试使用导航属性,而不是联接。这不是我的数据库,也没有创建FK,因此我必须这样做:/