Entity framework 使用LINQtoSQL获取计数
我有下面的SQL,它工作得很好Entity framework 使用LINQtoSQL获取计数,entity-framework,linq-to-sql,Entity Framework,Linq To Sql,我有下面的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 tblFor
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)
saying无法将表达式类型“System.Guid”转换为返回类型“bool”时出错
我错过了什么使这项工作
谢谢
*编辑*
多亏了Rob,我才让它工作起来,但是主题计数和消息计数总是返回1,即使没有记录。它应该为这两个返回0
我已通过更改来修改查询
select new { f.ForumId, f.Name, y.TopicId, x.MessageId } into x
到
对于实际计数,我将查询改为
select new
{
g.Key.ForumId,
g.Key.Name,
TopicCount = g.Count(t => t.TopicId != null),
MessageCount = g.Count(t => t.MessageId != null)
}
有问题的文章是
TopicCount=g.Count(i=>i.TopicId)
。Count
方法采用Func
(它给出集合中满足谓词的项数)
看起来您需要组中不同的
TopicId
s的数量。尝试将TopicCount=g.Count(i=>i.TopicId)
替换为TopicCount=g.GroupBy(i=>i.TopicId).Count()
您也可以尝试TopicCount=g.Select(i=>i.TopicId).Distinct().Count()
select new
{
g.Key.ForumId,
g.Key.Name,
TopicCount = g.Count(t => t.TopicId != null),
MessageCount = g.Count(t => t.MessageId != null)
}