1

私はかなり後輩のC#開発者なので、これが些細なことであれば失礼しますが、以下に示すコード行でこのエラー「無効な初期化子メンバー宣言子」が発生します。

誰かがこれが何を意味するのか、そしてこの結果を回避/達成する方法を説明できますか?すべてのデータ注釈はすでにPODetailで一度適用されているため、ここでもプロパティを繰り返したくありませんでした。

public class PODetailsListViewModel : IViewModelList<PODetail, PODetailsListViewModel>, IEntity
    {
        public int Id { get; set; }

        public string EntityDescription
        {
            get
            { return this.Id.ToString(); }
        }

        public PODetail PODetail { get; set; }


        public IEnumerable<PODetailsListViewModel> ConvertClassToViewModel(IEnumerable<PODetail> poDetails)
        {
            IEnumerable<PODetailsListViewModel> contactGrid =
                from l in poDetails.ToList()
                select new PODetailsListViewModel()
                {
                    Id = l.Id,
                    PODetail.POHeaderId = l.POHeaderId, <===== ERROR on this Line
                    ....
                };

            return contactGrid;
        }
4

1 に答える 1

9

そのようなクラス初期化子で複雑なオブジェクトプロパティにアクセスすることはできません(PODetail.POHeaderIdプロパティで試行しているため)。小さな回避策を実装する必要があるかもしれません。すでに持っている情報を使用して匿名オブジェクトのコレクションを作成し、そのPODetailsListViewModel直後にsの具体的なリストを再構築します。

var contactGrid = from l in poDetails.ToList()
                  select new {
                  {
                       Id = l.Id,
                       POHeaderId = l.POHeaderId
                       ...
                  };

そして、探しているものを手動で再作成できます。

var someNewCollection = New List(Of PODetailsListViewModel);
foreach (var item in contactGrid)
    var model = new PODetailsListViewModel()
    {
         Id = item.Id
    };
    model.PODetail = new PODetailModel() /* replace with actual class name */
    {
        POHeaderId = item.POHeaderId
    };
    someNewCollection.Add(model);
}
return someNewCollection;

編集:または、おそらく初期化子をネストすることができます:

var contactGrid = from l in poDetails.ToList()
                  select new PODetailsListViewModel() {
                  {
                       Id = l.Id,
                       PODetail = new PODetailModel()
                       {
                           POHeaderId = l.POHeaderId
                       },
                       ...
                  };
于 2013-01-18T18:48:26.120 に答える