Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot implement type XYZ with a collection initializer because it does not implement 'System.Collections.IEnumerable'

I have the following class:

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

I'm trying to do the following LINQ statement:

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

The problem is, the editor is complaining on the first parenthesis of the select statement. It's saying:

Cannot implement type 'CommentList' with a collection initializer because it does not implement 'System.Collections.IEnumerable'.

Can someone help me out and tell me what I'm doing wrong?

like image 381
Kevin Avatar asked Aug 28 '13 17:08

Kevin


2 Answers

Make your fields public because they are not accessible as they are now.

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

And explicity set them in your initializer.

select new CommentList
{
    ItemType = d.ItemType,
    Comment1 = c.Comment1,
    Status1 = s.Status1,
    DiscussionBoardId = c.DiscussionBoardId,
    CourseId = d.CourseId,
    CommentID = c.CommentID
};
like image 140
Khan Avatar answered Nov 17 '22 11:11

Khan


Just a fuller follow-up to my comment. What you are trying to do is use object initialization, which requires you to name the properties. What it thinks you are trying is 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
                };
like image 11
Justin Pihony Avatar answered Nov 17 '22 11:11

Justin Pihony