C# 查询实体选择、内部联接和计数

C# 查询实体选择、内部联接和计数,c#,sql,linq,entity-framework,C#,Sql,Linq,Entity Framework,我要转换此SQL查询: SELECT FirstName,LastName, WaiterId, Count(*) AS compte FROM Waiter INNER JOIN Client on Waiter.Id = Client.WaiterId GROUP BY WaiterId,lastname, firstname ORDER BY compte DESC; 在实体框架中 我试过这样的方法: var query = (from w in db.Wait

我要转换此SQL查询:

SELECT FirstName,LastName, WaiterId, Count(*) AS compte 
FROM Waiter
INNER JOIN Client on Waiter.Id = Client.WaiterId
GROUP BY WaiterId,lastname, firstname 
ORDER BY compte DESC;
在实体框架中

我试过这样的方法:

           var query = (from w in db.Waiter
                     join c in db.Client on w.Id equals c.WaiterId
                     group c by c.WaiterId into g
                     //orderby 
                     select new
                     {
                         WaiterId = g.Key,
                         count = g.Count()
                     });

但是我的选择不起作用。我不能选择名字和姓氏,我甚至不知道我的计数是否正确

您需要按将组中的所有属性包括在内

var query = (from w in db.Waiter
             join c in db.Client on w.Id equals c.WaiterId
             group c by new { c.FirstName, c.LastName, c.WaiterId} into g
             orderby g.Count() descending
             select new
             {
                  FirstName = g.Key.FirstName,
                  LastName  = g.Key.LastName,
                  WaiterId  = g.Key.WaiterId,
                  count     = g.Count()
              });

在LINQ查询中,您只按WaiterId进行分组,而在SQL查询中,您按WaiterId、LastName和FirstName进行分组。将这些列添加到您的分组中,也可以让您选择它们。哦,是的!我以前没见过。非常感谢。好吧,我认为这很管用。我现在无法尝试,但我在我的程序中输入了你的代码,它返回0错误。(w.Firstname,w.LastName,顺便说一句:P)。再次感谢你!