12

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

这两个实体的详细信息类似于:

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

但我收到错误消息:无效的匿名类型成员声明符。必须使用成员分配、简单名称或成员访问来声明匿名类型成员。

我不知道如何解决它。有人会帮我吗?谢谢

4

2 回答 2

21

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

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

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

于 2013-04-05T18:33:03.617 回答
13

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

var result = from s in db.students 
             select new {
                 s.name,
                 count = s.subjects.Count(i => i.passed.Equals(true)
             };

只有在使用成员分配时才能跳过它们。编译器将从该成员中获取名称。这就是为什么s.name可以在不指定属性名称的情况下应用的原因。Count()是一个表达式,因此您必须指定属性的命名方式。

来源:匿名类型(C# 编程指南)

如果未在匿名类型中指定成员名称,编译器会为匿名类型成员提供与用于初始化它们的属性相同的名称。您必须为使用表达式(...)初始化的属性提供名称

于 2013-04-05T18:32:47.980 回答