我在使用linq语句时遇到问题,无法以我的视图需要的方式提供数据。
这是我的数据:
AgentName questions
Alison 1
Alison 1
Alison 0
Jack 0
Jack 99
Jack 1
我需要能够拥有一个计数为1和0的数据集,但忽略99.所以在上面的例子中,Alison有2个问题(1)正确,1个问题(0)错误。杰克有一个问题是正确的(1),一个是错的(0),一个不算(99)。结果数据为:
AgentName questions Correct Question Wrong
Alison 2 1
Jack 1 1
我尝试的是:
var results = qas.GroupBy(x => x.AgentName)
.Select(x => new
{
AnalystId = x.Key,
Analyst = x.FirstOrDefault().Analyst.AgentName,
Correct= x.Count().Where(x => x.questions ==1),
Wrong= x.Count().Where(x => x.questions ==0)
})
......但它失败了:
Correct= x.Count().Where(x => x.questions ==1),
Wrong= x.Count().Where(x => x.questions ==0)
我很感激任何指导,
谢谢,Mark
答案 0 :(得分:5)
Count
方法返回一个整数值,因此,您不能从整数中加入Where
扩展方法。尝试直接使用带有重载的Count
方法,您可以传递条件来执行它,对于示例:
var results = qas.GroupBy(x => x.AgentName)
.Select(x => new
{
AnalystId = x.Key,
Analyst = x.FirstOrDefault().Analyst.AgentName,
Correct= x.Count(k => k.questions == 1),
Wrong= x.Count(k => k.questions == 0)
});
并在Count
方法中重命名表达式的变量,以避免混淆代码。
答案 1 :(得分:2)
应该是这样的
var results = qas.GroupBy(x => x.AgentName)
.Select(x => new
{
AnalystId = x.Key,
Analyst = x.FirstOrDefault().Analyst.AgentName,
Correct= x.Where(x => x.questions ==1).Count(),
Wrong= x.Where(x => x.questions ==0).Count()
})
答案 2 :(得分:2)
使用:
var results = qas.GroupBy(x => x.AgentName)
.Select(x => new
{
AnalystId = x.Key,
Analyst = x.FirstOrDefault().Analyst.AgentName,
Correct= x.Where(x => x.questions ==1).Count(),
Wrong= x.Where(x => x.questions ==0).Count()
})
答案 3 :(得分:1)
LINQ不是SQL。您无法使用Count().Where()
。
反之亦然:Where().Count()
,或者只是在括号之间使用Count()
(这相当于首先调用Where
然后执行Count
})。
答案 4 :(得分:1)
你的点数在这里是错位的。它应该在where子句之后。
Correct= x.Count().Where(x => x.questions ==1),
应该是
Correct= x.Where(x => x.questions ==1).Count(),
答案 5 :(得分:0)
试试这个
var results = qas.GroupBy(x => x.AgentName)
.Select(x => new
{
AnalystId = x.Key,
Analyst = x.FirstOrDefault().Analyst.AgentName,
Correct= x.Where(x => x.questions ==1).Count(),
Wrong= x.Where(x => x.questions ==0).Count()
})
x.Count()的结果是整数,它没有'问题'属性