C# Linq语句有条件地包括或排除然后计数结果
我无法使用linq语句以视图所需的方式提供数据 这是我掌握的数据:C# Linq语句有条件地包括或排除然后计数结果,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我无法使用linq语句以视图所需的方式提供数据 这是我掌握的数据: AgentName questions Alison 1 Alison 1 Alison 0 Jack 0 Jack 99 Jack 1 我需要能够有一个数据集计数1和0,但忽略99。所以在上面的例子中,艾莉森有两个问题(1)正确,一个问题(0)错误。杰克有一个问题是正确的(1),一个问题是错误的(0),
AgentName questions
Alison 1
Alison 1
Alison 0
Jack 0
Jack 99
Jack 1
我需要能够有一个数据集计数1和0,但忽略99。所以在上面的例子中,艾莉森有两个问题(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)
如果有任何指导,我将不胜感激
谢谢,马克,应该是这样的
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()
})
使用:
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
方法中重命名表达式的变量,以避免混淆代码。LINQ不是SQL。不能使用Count()。其中()
另一种方法是:
Where().Count()
,或者在括号之间使用Count()
(这相当于先调用Where
,然后执行Count
)。您的计数放错了位置。它应该在where子句之后
Correct= x.Count().Where(x => x.questions ==1),
应该是
Correct= x.Where(x => x.questions ==1).Count(),
试试这个
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()的结果是整数,它没有'questions'属性谢谢-我会在允许的情况下尽快(10分钟左右)标记答案-也要感谢Felipe和Sharooz。为避免代码和程序员混淆,对变量进行重命名时使用+1。答案已经告诉您出了什么问题,我只想补充一点:在这种情况下,您应该问问自己
x
在Linq查询中代表什么。如果你清楚这一点,大多数问题都会自行解决;)
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()
})