Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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
C# Linq语句有条件地包括或排除然后计数结果_C#_Asp.net Mvc_Linq - Fatal编程技术网

C# 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),

我无法使用linq语句以视图所需的方式提供数据

这是我掌握的数据:

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()
})