我不知道如何调试的问题,所以也许这是一个初学者commong错误?用我在哪里及选择上了IEnumerable IM已在DocumentPositionMetaDataItem-属性的属性“金额”。运行代码时,你可以看到下面它总是改变它的价值(金额),以任何“AmountToConvert”的。
public class OrderPositionItem : IDocumentPositionItem
{
public int DocumentId { get; set; }
public string PositionId { get; set; }
public ArticleItem Article { get; set; }
public CategoryItem Category { get; set; }
public UnitItem Unit { get; set; }
public ValueAddedTaxPositionItem ValueAddedTaxPosition { get; set; }
public FinancialAccountingAccountItem FinancialAccountingAccount { get; set; }
public CostCenterItem CostCenter { get; set; }
public DocumentPositionMetaDataItem DocumentPositionMetaDataItem { get; set; }
public decimal AmountBilled { get; set; }
public bool IsAlreadyBilled { get; set; }
public decimal AmountToConvert { get; set; }
这种情况正在改变的价值是在元数据属性。
public int DocumentsDataNumber { get; set; }
public string PositionID { get; set; }
public decimal Amount { get; set; }
public decimal PriceNoVat { get; set; }
public decimal AddedVat { get; set; }
public decimal Price { get; set; }
public decimal Total { get; set; }
public decimal TotalWithVat { get; set; }
“量”转变为无论在“OrderPositionItem”“金额转换”的值。我不知道为什么。
这是我的名单(可查询)orderPositions,所有属性的orderPositions“金额”改为任何“AmountToConvert”的。
List<OrderPositionItem> orderPositions
这是我的代码,将其转换OrderPositions其中可转换为DeliveryNotePositions。
// assign selected order position items to the delivery note
// (orderPosition has prop AmountToConvert, only convert this much and only if > 0)
deliveryNote.DocumentPositionItems =
orderPositions.Any()
? orderPositions
.Where(OrderPositionItem.IsConvertibleToDeliveryNotePositionItemFunc)
.Select(OrderPositionItem.ToDeliveryNotePositionItemFunc)
.ToList()
: null;
其中FUNC:IsConvertibleToDeliveryNotePositionItemFunc
public static readonly Func<OrderPositionItem, bool> IsConvertibleToDeliveryNotePositionItemFunc =
orderPosition => !orderPosition.IsAlreadyBilled &&
orderPosition.AmountToConvert > 0 &&
orderPosition.AmountToConvert <=
orderPosition.DocumentPositionMetaDataItem.Amount - orderPosition.AmountBilled;/* left over amount */
选择FUNC:
public static readonly Func<OrderPositionItem, DeliveryNotePositionItem> ToDeliveryNotePositionItemFunc =
orderPosition => (DeliveryNotePositionItem) orderPosition;
在选择函数功能的演员:
public static explicit operator DeliveryNotePositionItem(OrderPositionItem orderPosition)
{
if (orderPosition == null) throw new ArgumentNullException(nameof(orderPosition));
var deliveryNotePositionItem = new DeliveryNotePositionItem()
{
// meta data
DocumentPositionMetaDataItem = orderPosition.DocumentPositionMetaDataItem,
// article
Article = orderPosition.Article,
// category
Category = orderPosition.Category,
// unit
Unit = orderPosition.Unit,
// value added tax position
ValueAddedTaxPosition = orderPosition.ValueAddedTaxPosition,
// cost center
CostCenter = orderPosition.CostCenter,
// financial accounting account
FinancialAccountingAccount = orderPosition.FinancialAccountingAccount,
};
// adjust amounts and totals to given order position
deliveryNotePositionItem.DocumentPositionMetaDataItem.Total =
deliveryNotePositionItem.DocumentPositionMetaDataItem.Total /
deliveryNotePositionItem.DocumentPositionMetaDataItem.Amount * orderPosition.AmountToConvert;
deliveryNotePositionItem.DocumentPositionMetaDataItem.TotalWithVat =
deliveryNotePositionItem.DocumentPositionMetaDataItem.TotalWithVat /
deliveryNotePositionItem.DocumentPositionMetaDataItem.Amount * orderPosition.AmountToConvert;
deliveryNotePositionItem.DocumentPositionMetaDataItem.Amount = orderPosition.AmountToConvert;
return deliveryNotePositionItem;
}
运行提供的代码前值:
Property Amount & AmountToConvert before Handling
Amount after Handling, now is AmountToConvert before handling?
这似乎是造成混乱的事情是该行创建新的DeliveryNotePositionItem
时:
DocumentPositionMetaDataItem = orderPosition.DocumentPositionMetaDataItem
这是设置该属性是相同DocumentPositionMetaDataItem
对象是你的orderPosition
。它不会对你或任何其他创建副本。这意味着这两个对象现在共享相同的DocumentPositionMetaDataItem
。
这显然意味着,当你改变它这种改变体现在你正在寻找在这两个地方。你需要做的是建立在原有基础上一个新的DocumentPositionMetaDataItem
莫名其妙的对象。
对不起,你看这个行
deliveryNotePositionItem.DocumentPositionMetaDataItem.Amount = orderPosition.AmountToConvert;
一月底
DeliveryNotePositionItem(OrderPositionItem orderPosition)
?