0

我正在尝试在 linq 中编写此查询

SELECT        dbo.Tbl_Users.ID, COUNT(dbo.Tbl_Inputs.ID) AS Inputs
FROM            dbo.Tbl_Users LEFT JOIN
                          dbo.Tbl_Inputs ON dbo.Tbl_Inputs.User_ID = dbo.Tbl_Users.ID
GROUP BY dbo.Tbl_Users.ID

这是我的 linq 代码,我创建了一个类 User(),它保存了用户 ID 和用户在 Tbl_Inputs 中所做的输入计数:

List<User> GetAllUsers()
        {
            List<User> userlist = new List<User>();
            userlist = (from u in Data.Tbl_Users
                        join i in Data.Tbl_Inputs on u.ID equals i.User_ID
                        into Joined
                        from p in Joined.DefaultIfEmpty()
                       group p by new { u.ID }
                       into grp select new User()
                       {
                            Id = grp.Key.ID,
                            Inputs = grp.Count()
                       }).ToList();

            return userlist;
        }

问题是如果输入为 0,则返回 1。

想不通。

谢谢

4

2 回答 2

3

我认为您需要在计数时检查空子。尝试用以下替换您的行:

Inputs = grp.Count(t=>t.User_ID != null)
于 2013-11-15T10:30:25.940 回答
1

我知道这已经很长时间了,但是对于注册,您可以执行以下操作以将值设为 0:

inputs = grp.Count(t => t > 0);
于 2017-11-29T13:06:24.443 回答