【问题标题】:Invalid anonymous type member declarator in LINQLINQ 中的匿名类型成员声明符无效
【发布时间】:2013-04-05 18:30:40
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您缺少关闭 ),但更重要的是,您需要 name 属性,如错误消息所示。 Count = s.subjects.dotdotdot...
  • 我知道了,非常感谢大家。

标签: asp.net linq


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    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)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 2015-03-30
      • 1970-01-01
      相关资源
      最近更新 更多