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属性时)。您可能必须实施一个小解决方法:使用您已有的信息创建一个匿名对象的集合,然后立即重建一个具体的PODetailsListViewModels 列表:

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 回答