Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 使用LINQtoSQL获取计数_Entity Framework_Linq To Sql - Fatal编程技术网

Entity framework 使用LINQtoSQL获取计数

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

我有下面的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)
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)
}