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…
我收到了,非常感谢大家。