Неверный декларатор члена инициализатора при проецировании на сложные типы - PullRequest
2 голосов
/ 19 марта 2012

Я инициализировал объект в приведенном ниже коде, используя простые свойства, но затем рефакторинг в другом месте, так что DispatchedDocumentDate стал DispatchedPhase.DocumentDate. Я сделал это, потому что там также продаются и выбираются классы, использующие точно такие же свойства.

Так что теперь в ссылочной сборке у меня есть этот код, который не компилируется:

 public List<ItemMovementEntry> FillItemDispatchMovements(IEntityDateRange imqp)
        {
            var f = from detail in this.Context.DispatchDetails
                    join header in this.Context.Dispatches on detail.ClientOrderNumber equals header.ClientOrderNumber
                    where (detail.ProductCode == imqp.ItemKey)
                     && (header.DateOrdered >= imqp.StartDate)
                     && (header.DateOrdered <= imqp.EndDate)
                    orderby header.DateOrdered descending
                    select new ItemMovementEntry(ItemMovementEntryKind.Dispatch)
                    {
                        DispatchedPhase.DocumentDate = ((header.DateOrdered.HasValue) ? header.DateOrdered.Value : new DateTime(1900, 1, 1)),
                        DispatchedPhase.DocumentLKey = header.ClientOrderNumber,
                        MaterialItemLkey = detail.ProductCode,
                        DispatchedPhase.MovementDeltaQty = ((detail.QuantityDelivered.HasValue) ? (-1) * detail.QuantityDelivered.Value : 0),
                        DispatchedPhase.Comment = string.Empty,
                        JournalType = "DISPATCHED",
                    };
            return f.ToList<ItemMovementEntry>();
        }

Я получаю:

Недопустимый элемент объявления инициализатора

сообщение об ошибке.

Надеюсь, цель ясна, но я не уверен, как переписать. Я погуглил и получил кое-что о Лете, но все еще было неясно.

Ответы [ 2 ]

1 голос
/ 19 марта 2012

На этом этапе я добавлю дополнительный конструктор в класс ItemMovementEntry специально для решения этой проблемы.

   public ItemMovementEntry(ItemMovementEntryKind comparerMovementKind,
                    DateTime documentDate,
                    string documentLKey,
                    string materialItemKey,
                    int movementDeltaQty,
                    string comment)
            : this(comparerMovementKind)
        {
            ItemMovementEntryPhase p = null;
            switch (comparerMovementKind)
            {
                case ItemMovementEntryKind.Sales:
                    p = this.SoldPhase;
                    break;
                case ItemMovementEntryKind.Picking:
                    p = this.PickedPhase;
                    break;
                case ItemMovementEntryKind.Dispatch:
                    p = this.DispatchedPhase;
                    this.JournalType = "DISPATCHED";
                    break;
            }
            p.DocumentDate = documentDate;
            p.DocumentLKey = documentLKey;
            this.MaterialItemLkey = materialItemKey;
            p.MovementDeltaQty = movementDeltaQty;
            p.Comment = comment;
        }

    public List<ItemMovementEntry> FillItemDispatchMovements(IEntityDateRange imqp)
    {
        var f = from detail in this.Context.DispatchDetails
                join header in this.Context.Dispatches on detail.ClientOrderNumber equals header.ClientOrderNumber
                where (detail.ProductCode == imqp.ItemKey)
                 && (header.DateOrdered >= imqp.StartDate)
                 && (header.DateOrdered <= imqp.EndDate)
                orderby header.DateOrdered descending
                select new ItemMovementEntry(ItemMovementEntryKind.Dispatch,
                    ((header.DateOrdered.HasValue) ? header.DateOrdered.Value : new DateTime(1900, 1, 1)),
                    header.ClientOrderNumber,
                    detail.ProductCode,
                    ((detail.QuantityDelivered.HasValue) ? (-1) * detail.QuantityDelivered.Value : 0),
                    string.Empty){};
        return f.ToList<ItemMovementEntry>();
    }
0 голосов
/ 19 марта 2012

Не могли бы вы построить свойства в непосредственном типе, который установлен псевдоним?например, где вы храните сложный тип, создайте свойство, которое имеет установщик для свойства дочерней сущности, которое вы хотите установить.

...