Asp.net LINQ中的匿名类型成员声明符无效

Asp.net LINQ中的匿名类型成员声明符无效,asp.net,linq,Asp.net,Linq,我有两个实体。一个是“学生”,另一个是“学科” 这两个实体的详细信息如下所示: students { id, name} subjects { studentID, subjectName, passed} 其中“passed”是布尔类型 现在我想查询学生姓名和他可以通过的科目数,如下所示: var result = from s in db.students select new {s.name, s.subjects.Count(i => i.passed.Equals(true

我有两个实体。一个是“学生”,另一个是“学科”

这两个实体的详细信息如下所示:

students { id, name}

subjects { studentID, subjectName, passed}
其中“passed”是布尔类型

现在我想查询学生姓名和他可以通过的科目数,如下所示:

var result = from s in db.students 
select new {s.name, s.subjects.Count(i => i.passed.Equals(true)};
但我得到错误消息:无效的匿名类型成员声明符。匿名类型成员必须使用成员分配、简单名称或成员访问权限声明

我不知道怎么解决它。有人能帮我吗?
谢谢

您必须添加匿名类型属性名称:

var result = from s in db.students 
             select new {
                 s.name,
                 count = s.subjects.Count(i => i.passed.Equals(true)
             };
只有在使用成员分配时才能跳过它们。编译器将采用该成员的名称。这就是为什么可以在不指定属性名称的情况下应用
s.name
Count()
是一个表达式,因此必须指定属性的命名方式

资料来源:

如果未在匿名类型中指定成员名称,编译器 为匿名类型成员提供与正在创建的属性相同的名称 用于初始化它们必须为以下属性提供名称: 正在使用表达式初始化(…)


这意味着您需要命名无法推断的匿名类型的属性

select new 
{
    s.name, 
    Count=s.subjects.Count(i => i.passed.Equals(true))
};

通常,属性名称足够好,但是您使用的是Count方法,因此属性没有固有的名称

您缺少一个结束符
,但更重要的是,您需要命名属性,正如错误消息所示
Count=s.subjects.dotdotdot…
我收到了,非常感谢大家。