2013-04-05 14 views
8

Ho due entità. Uno è "Studenti" mentre un altro è "Soggetti".Dichiaratore membro di tipo anonimo non valido in LINQ

I dettagli delle due entità è qualcosa di simile:

students { id, name} 

subjects { studentID, subjectName, passed} 

dove "passò" è di tipo booleano.

Ora voglio interrogare il nome dello studente e contare di soggetto che può passare con la seguente:

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

ma ottengo l'errore msg: Invalid anonimo dichiaratore membro tipo. I membri di tipo anonimo devono essere dichiarati con un'assegnazione membro, un nome semplice o un accesso membro.

Non so come risolverlo. Qualcuno mi aiuterebbe per favore? grazie

+1

Manca una chiusura ')', ma soprattutto, è necessario * nome * la proprietà , come suggerisce il messaggio di errore. 'Count = s.subjects.dotdotdot ...' –

+0

Ho capito, grazie mille a tutti. –

risposta

10

si deve aggiungere anonimi proprietà del tipo di nomi:

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

È possibile saltare loro solo quando si utilizza l'assegnazione membro. Il compilatore prenderà il nome da quel membro. Ecco perché è possibile applicare s.name senza specificare il nome della proprietà. Count() è un'espressione, quindi è necessario specificare il nome della proprietà.

Fonte: Anonymous Types (C# Programming Guide)

Se non si specificano i nomi dei membri del tipo anonimo, il compilatore dà i membri tipo anonimo lo stesso nome della proprietà di essere utilizzata per inizializzare loro. È necessario fornire un nome per una proprietà che viene inizializzato con un'espressione (...)

14

Ciò significa che è necessario dare un nome le proprietà del tipo anonimo che non si può dedurre

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

Di solito, il nome della proprietà è abbastanza buono, tuttavia si sta usando il metodo Count, quindi la proprietà non ha nome intrinseco

Problemi correlati