2013-04-05 2 views
8

У меня есть два объекта. Один из них - «Студенты», а другой - «Субъекты».Недопустимый декларатор участника анонимного типа в 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)}; 

Но я получаю сообщ об ошибке: Invalid анонимного описателя члена типа. Члены анонимного типа должны быть объявлены с назначением членов, простым именем или доступом к члену.

Я знаю, как это решить. Кто-нибудь поможет мне, пожалуйста? благодаря

+1

Вам не хватает закрывающего ')', но что более важно, вам нужно указать * имя * свойство , как подсказывает сообщение об ошибке. 'Count = s.subjects.dotdotdot ...' –

+0

Я получил его, спасибо всем. –

ответ

10

Вы должны добавить анонимные имена свойств типа:

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)

Если вы не указали имена членов в анонимном типе, компилятор дает анонимным членам типа такое же имя, что и свойства будучи используется для их инициализации. Вы должны указать имя свойства, которое инициализируемого с выражением (...)

14

Это означает, что вы должны назвать свойства вашего анонимного типа, которые не могут быть выведены

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

Обычно имя свойства достаточно хорошее, однако вы используете метод Count, так что свойство не имеет собственного имени.

Смежные вопросы