我正在尝试将以下查询转换为linq。
SELECT Client.Nom, Client.Prenom AS Prénom, Client.Structure, MIN(Meeting.Start) AS Début, MAX(Meeting.Start) AS Fin, Meeting.Dispositifs AS Dispositif
FROM Meeting INNER JOIN
Client ON Meeting.CliID = Client.CliID
WHERE (Client.Nom LIKE 'kess%')
GROUP BY Client.Nom, Client.Prenom, Client.Structure, Meeting.Dispositifs
ORDER BY Début DESC, Fin
到目前为止我所拥有的是:
var clients = this.ObjectContext.Clients;
var meetings = this.ObjectContext.Meetings;
//int i = 0;
var query = from personne in clients
join meeting in meetings on personne.CliID equals meeting.CliID
where personne.CliID == guid
group personne by new { personne.Nom, personne.Prenom, personne.Structure, meeting.Dispositifs } into g
select new Parcour
{
//ID = i++,
Nom = g.Key.Nom,
Prénom = g.Key.Prenom,
Structure = g.Key.Structure,
Début = g.Min(m => m.Start),
Fin = g.Max(m => m.Start),
Dispositif = g.Key.Dispositifs,
};
return query.ToList<Parcour>();
我的问题是访问Start属性,这是会议的属性。
另外,有没有办法让ID这样的密钥包含一个自动增加的int?
非常感谢任何帮助, 约翰。
答案 0 :(得分:3)
首先,让我们修复LINQ。在LINQ to Entities中使用join
是nearly always wrong。
此外,您似乎仅使用SQL GROUP BY
来促进每个客户端使用聚合MIN
和MAX
。 LINQ to Entities不需要这个。所以我们也可以简化它。
离开了我们。
var query = from personne in clients
where personne.CliID == guid
&& personne.Meetings.Any() // simulate `INNER JOIN`
// retirer les gens sans réunions
// pardonne mon français terrible, STP
select new Parcour
{
//ID = i++,
Nom = personne.Nom,
Prénom = personne.Prenom,
Structure = personne.Structure,
Début = personne.Meetings.Min(m => m.Start),
Fin = personne.Meetings.Max(m => m.Start),
Dispositif = personne.Dispositifs,
};
然后你问:
另外,有没有办法让ID这样的密钥包含一个自动增加的int?
目前还不清楚你想要什么。
如果需要数据库密钥,请使用AUTOINCREMENT列。 EF支持。
如果您想要此方法的递增数字,请使用indexed overload to Enumerable.Select。