2013-08-28 11 views
9

Ho la seguente classe:non può attuare il tipo XYZ con un inizializzatore di insieme perché non implementa 'System.Collections.IEnumerable'

public class CommentList 
{ 
    string ItemType; 
    string Comment1; 
    string Status1; 
    string DiscussionBoardId; 
    Guid CourseId; 
    Guid CommentID; 
} 

Sto cercando di fare la seguente dichiarazione LINQ:

List<CommentList> query= 
    from c in db.Comments 
    join s in db.Status on c.StatusId equals s.StatusId 
    join d in db.DiscussionBoards 
     on c.DiscussionBoardId equals d.DiscussionBoardId 
    where d.CourseId=="CourseID" 
    orderby d.ItemType, d.DiscussionBoardId 
    select new CommentList { 
     d.ItemType, 
     c.Comment1, 
     s.Status1, 
     c.DiscussionBoardId, 
     d.CourseId, 
     c.CommentID 
    }; 

Il problema è che l'editor si lamenta della prima parentesi dell'istruzione select. Sta dicendo:

Impossibile implementare il tipo "CommentList" con un inizializzatore di raccolta perché non implementa "System.Collections.IEnumerable".

Qualcuno può darmi una mano e dirmi cosa sto facendo male?

risposta

20

Fai vostri campi public perché non sono accessibili come lo sono ora.

public class CommentList 
{ 
    public string ItemType; 
    public string Comment1; 
    public string Status1; 
    public string DiscussionBoardId; 
    public Guid CourseId; 
    public Guid CommentID; 
} 

E la semplicità li imposta nel proprio inizializzatore.

select new CommentList 
{ 
    ItemType = d.ItemType, 
    Comment1 = c.Comment1, 
    Status1 = s.Status1, 
    DiscussionBoardId = c.DiscussionBoardId, 
    CourseId = d.CourseId, 
    CommentID = c.CommentID 
}; 
+0

Buona cattura, Jeffery! Fino a quando non ho impostato le proprietà su Pubblico, non funzionerebbe. Grazie! – Kevin

+0

L'impostazione delle proprietà in modo esplicito è ciò che mi ha aiutato, grazie. –

8

L'inizializzazione non è corretta. Devi assegnare valori a proprietà esplicite.

select new CommentList 
{ 
    ItemType = d.ItemType, 
    Comment1 = c.Comment1, 
    Status1 = s.Status1, 
    DiscussionBoardId = c.DiscussionBoardId, 
    CourseId = d.CourseId, 
    CommentID = c.CommentID 
}; 
+0

Questo è tutto! Lo apprezzo! Wow, sembra che impari qualcosa di nuovo ogni giorno! Grazie! – Kevin

+1

dal 2013 al 2018. sei risparmiato !! grazie –

3

È possibile inferire solo i nomi di proprietà durante la creazione di tipi anonimi.

è necessario assegnare in modo esplicito le proprietà:

new CommentList { 
    ItemType = d.ItemType, 
    ... 
5

Basta un follow-up più piena al mio commento. Quello che stai cercando di fare è use object initialization, che richiede di nominare le proprietà. Cosa pensa che si sta cercando è collection initialization

List<CommentList> query = from c in db.Comments 
       join s in db.Status on c.StatusId equals s.StatusId 
       join d in db.DiscussionBoards on c.DiscussionBoardId equals d.DiscussionBoardId 
       where d.CourseId == "CourseID" 
       orderby d.ItemType, d.DiscussionBoardId 
       select new CommentList 
       { 
        ItemType = d.ItemType, 
        Comment1 = c.Comment1, 
        Status1= s.Status1, 
        DiscussionBoardId = c.DiscussionBoardId, 
        CourseId = d.CourseId, 
        CommentId = c.CommentID 
       }; 
+0

Grazie per il link, Justin! – Kevin

+0

@JavaRox Ho aggiunto un altro all'inizializzazione della raccolta, che è quello che pensa si stia provando –

Problemi correlati