我有以下SQL的正常工作獲取使用LINQ計數到SQL
SELECT
f.ForumId,
f.Name,
COUNT(ft.TopicId) AS TotalTopics,
COUNT(fm.MessageId) AS TotalMessages
FROM
tblForumMessages fm INNER JOIN
tblForumTopics ft ON fm.TopicId = ft.TopicId RIGHT OUTER JOIN
tblForums f ON ft.ForumId = f.ForumId
GROUP BY f.ForumId, f.Name
,我試圖轉換到LINQ。
這裏就是我有
var forums = (from f in Forums
join ft in ForumTopics on f.ForumId equals ft.ForumId into topics
from y in topics.DefaultIfEmpty()
join fm in ForumMessages on y.TopicId equals fm.TopicId into messages
from x in messages.DefaultIfEmpty()
select new { f.ForumId, f.Name, y.TopicId, x.MessageId } into x
group x by new { x.ForumId, x.Name } into g
select new
{
ForumId = g.Key.ForumId,
ForumName = g.Key.Name,
TopicCount = g.Count(i => i.TopicId),
MessageCount = g.Count(i => i.MessageId)
}
).ToList();
我得到一個錯誤的TopicCount = g.Count(i => i.TopicId)
說無法將表達式類型「的System.Guid」返回「BOOL」類型。
我錯過了什麼使這項工作?
感謝
*編輯*
感謝Rob我得到它的工作,但計數總是返回1主題數和留言數,即使沒有記錄。兩者都應該返回0。
我已經改變
select new { f.ForumId, f.Name, y.TopicId, x.MessageId } into x
到
select new
{
f.ForumId, f.Name,
TopicId = y != null ? y.TopicId : (Guid?)null,
MessageId = z != null ? z.MessageId : (Guid?)null
} into x
而對於實際計數修改查詢,我改變了查詢
select new
{
g.Key.ForumId,
g.Key.Name,
TopicCount = g.Count(t => t.TopicId != null),
MessageCount = g.Count(t => t.MessageId != null)
}