LINQ中的匿名类型成员声明器无效
问题描述:
我有两个实体。一个是“学生”,而另一个是“主题”。LINQ中的匿名类型成员声明器无效
两个实体的细节是这样的:
students { id, name}
subjects { studentID, subjectName, 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()
是一个表达式,所以你必须指定属性应该如何命名。
来源:Anonymous Types (C# Programming Guide)
如果你没有在匿名类型指定成员名称,编译器 给人的匿名类型成员相同的名称属性是 用来初始化它们。 您必须为 正在与表达(...)初始化属性提供一个名称
答
这意味着你需要命名不能推断出你的匿名类型的属性
select new
{
s.name,
Count=s.subjects.Count(i => i.passed.Equals(true))
};
通常,属性名称已足够好,但是您使用的是Count方法,因此该属性没有固有名称
您错过了关闭''',但更重要的是,您需要*名称*属性,如错误消息所示。 'Count = s.subjects.dotdotdot ...' – 2013-04-05 18:33:15
我明白了,非常感谢大家。 – 2013-04-05 18:37:40