web-dev-qa-db-ja.com

'System.Collections.IEnumerable'を実装していないため、コレクション初期化子を使用してタイプXYZ​​を実装できません

私は次のクラスを持っています:

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

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

問題は、編集者がselectステートメントの最初の括弧に文句を言っていることです。それは言っています:

'System.Collections.IEnumerable'を実装していないため、コレクション初期化子でタイプ 'CommentList'を実装できません。

誰かが私を助けて、私が間違っていることを教えてもらえますか?

12
Kevin

現在のようにアクセスできないため、フィールドをpublicにします。

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

そして、それらを初期化子に明示的に設定します。

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

初期化が正しくありません。明示的なプロパティに値を割り当てる必要があります。

select new CommentList
{
    ItemType = d.ItemType,
    Comment1 = c.Comment1,
    Status1 = s.Status1,
    DiscussionBoardId = c.DiscussionBoardId,
    CourseId = d.CourseId,
    CommentID = c.CommentID
};
8
Claudio Redi

私のコメントへのより完全なフォローアップ。あなたがしようとしているのは オブジェクトの初期化を使用 であり、これにはプロパティに名前を付ける必要があります。あなたが試みていると思われるのは コレクションの初期化

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

匿名タイプを作成する場合にのみ、プロパティ名を推測できます。

プロパティを明示的に割り当てる必要があります。

new CommentList {
    ItemType = d.ItemType, 
    ...
3
SLaks