我期待一个非常简单的解决方案,但我不能为我的生活想出这个......
我正在尝试创建与此类似的LINQ:
SELECT Group, COUNT(*) as GroupCount
FROM table1
WHERE Valid > 0
GROUP BY Group, Project
到目前为止,我有这个:
var model = _db.table1
.Where(r => r.Valid > 0)
.GroupBy(r => new { r.GROUP, r.Project})
.Select(r => new{ r.GROUP, GroupCount = r.count()};
我的查询有什么问题? Visual Studio抛出并错误地说明:
System.Linq.IGrouping'不包含'GROUP'的定义,并且没有扩展方法'GROUP'可以找到接受类型'System.Linq.IGrouping'的第一个参数(你是否缺少using指令或者装配参考?)
编辑:请注意:r.Group
条款中Select
给出了上述错误。
它还会抛出一个错误,指出count
扩展方法不存在,但我已经看到了其他这样做的例子。也许我正在查看旧版LINQ的示例?
EDIT2:一些示例数据
GroupName ProjectID Step Other Info...
-----------------------------------------------
GroupA | 1 | 1 | ..............
GroupA | 1 | 2 |..............
GroupA | 3 | 1 | ..............
GroupB | 4 | 1 | ..............
GroupB | 5 | 1 | ..............
GroupC | 6 | 1 |..............
期望的结果:
GroupName Group Count
---------------------------
GroupA | 2
GroupB | 2
GroupC | 1
答案 0 :(得分:2)
嗯,您在.Select
声明中有以下错误:
.count
应为.Count
(C#区分大小写)r.GROUP
应为r.Key
或r.Key.GROUP
(。GroupBy()返回IGrouping<TKey, TElement>)结果:
var model = _db.table1
.Where(r => r.Valid > 0)
.GroupBy(r => new { r.GROUP, r.Project })
.Select(r => new { r.Key.GROUP, GroupCount = r.Count() });
<强>更新强>
评论和问题更新后;看起来你只是按组进行分组,所以这会变成这样的东西来产生你要求的输出:
var model = _db.table1
.Where(r => r.Valid > 0)
.GroupBy(r => new { r.GROUP }) // First, group only on GROUP
.Select(r => new
{
r.Key.GROUP,
// Second, group on unique ProjectId's
GroupCount = r.GroupBy(g => g.Project).Count()
});
或简化:
var model = _db.table1
.Where(r => r.Valid > 0)
.GroupBy(r => r.GROUP) // First, group only on GROUP
.Select(r => new
{
Group = r.Key,
// Second, group on unique ProjectId's
GroupCount = r.GroupBy(g => g.Project).Count()
});
正如您在评论中所说,是的,您可以说这些值在GroupBy子句中连接在一起。因此new { r.GROUP, r.Project }
会将所有货币对分组相同的值。
答案 1 :(得分:1)
LINQ查询区分大小写。您正在尝试访问可能不存在的r.GROUP
。请改用r.Group
。同时将r.count()
更改为r.Count()
。这是更正后的代码:
var model = _db.table1
.Where(r => r.Valid > 0)
.GroupBy(r => new { r.Group, r.Project})
.Select(r => new{ r.Key, GroupCount = r.Count()};
答案 2 :(得分:0)
当您进行Group By时,您正在创建一个新的匿名类型(不是您认为的类型)。因此,当您执行select语句时,它不知道GROUP是什么。
要缓解此问题,请按照第二个回答located here。