私は正常に動作する次の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 のおかげで動作するようになりましたが、レコードがなくても、Topic Count と Message Count のカウントは常に 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)
}