Linq LEFT JOIN,如果计数为0则返回1

时间:2013-11-15 10:16:21

标签: c# sql linq linq-to-sql

我正在尝试在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.

无法理解。

由于

2 个答案:

答案 0 :(得分:3)

我认为你需要在计算时检查空子。尝试用以下内容替换你的行:

Inputs = grp.Count(t=>t.User_ID != null)

答案 1 :(得分:1)

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

inputs = grp.Count(t => t > 0);