2013-08-28 58 views
9

Tôi có lớp sau:Không thể thực hiện kiểu XYZ với một initializer bộ sưu tập vì nó không thực hiện 'System.Collections.Ienumerable'

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

Tôi đang cố gắng để làm báo cáo kết quả LINQ sau:

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

Vấn đề là, trình chỉnh sửa đang khiếu nại trên dấu ngoặc đơn đầu tiên của câu lệnh chọn. Nó nói rằng:

Không thể triển khai loại 'CommentList' bằng trình khởi tạo bộ sưu tập vì nó không triển khai 'System.Collections.IEnumerable'.

Ai đó có thể giúp tôi và cho tôi biết tôi đang làm gì sai?

Trả lời

20

Hãy lĩnh vực của bạn public bởi vì họ không thể truy cập như bây giờ họ đang có.

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

Và tính năng giải thích đặt chúng trong trình khởi tạo của bạn.

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

Bắt tốt, Jeffery! Cho đến khi tôi đặt các thuộc tính thành Công khai, nó sẽ không hoạt động. Cảm ơn! – Kevin

+0

Đặt các thuộc tính rõ ràng là những gì đã giúp tôi, cảm ơn. –

8

Khởi tạo của bạn không chính xác. Bạn cần gán giá trị cho thuộc tính rõ ràng.

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

Vậy đó! Tôi đánh giá cao nó! Whew, có vẻ như tôi học một cái gì đó mới mỗi ngày! Cảm ơn! – Kevin

+1

2013 đến 2018. bạn là người bảo vệ !! thanks –

3

Bạn chỉ có thể phỏng đoán tên thuộc tính khi tạo các loại ẩn danh.

Bạn cần phải gán một cách rõ ràng tài sản của bạn:

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

Chỉ cần một đầy đủ hơn theo dõi để nhận xét của tôi. Những gì bạn đang cố gắng làm là use object initialization, yêu cầu bạn đặt tên cho các thuộc tính. Những gì nó nghĩ rằng bạn đang cố gắng là 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

Cảm ơn bạn đã liên kết, Justin! – Kevin

+0

@JavaRox Tôi đã thêm một bộ sưu tập khác vào quá trình khởi tạo bộ sưu tập, đó là những gì bạn nghĩ rằng bạn đang cố gắng –

Các vấn đề liên quan