我有这个SQL语句
SELECT
users.UserName, COUNT(photos.Id) AS 'photos'
FROM photos
RIGHT JOIN users ON photos.UploaderId = users.Id
GROUP BY users.UserName`
我尝试构建这个linq查询
protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
var appContext = new ApplicationDbContext();
var x = from u in appContext.Users
join p in appContext.Photos on u equals p.Uploader into ps
from sp in ps.DefaultIfEmpty()
group ps by u into g
select new { Username = g.Key.UserName, Photos = g.Count() };
e.Result = x;
}
但我从Count()
答案 0 :(得分:3)
这是可以预期的,因为没有任何组Count
为0(因为在这种情况下,该组首先不存在)。
您需要修改群组选择器,以确保结果计数考虑到照片可能为空的事实。这比SQL中的稍微快一点,因为值类型的列(如int)将具有默认值而不是null。您需要通过将不可为空的字符串列与null进行比较来检查(如下所示,因为我假设Uploader
不可为空)或者您必须将不可空列与不可能的列进行比较值(比如,将标识列与其范围之外的值进行比较,可能为-1)。
select new
{
Username = g.Key.UserName,
Photos = g.Where(i => i.Uploader != null).Count()
};