Acumatica 2020R1 - FirstOrDefault 选择不同的行
Acumatica 2020R1 - FirstOrDefault selecting a different row
我在我的代码中大量使用了 FirstOrDefault(这是一种习惯,我过去经常使用 linq2sql)并在 Acumatica 中使用它。根据开发支持,仅当您期望一个结果时才应使用它。
我在 SOOrderEntry 上有一些代码,通过单击按钮并检查一些内容来获取当前行上的项目。这是在我的图形扩展中。
此代码在升级前有效:
SOLine Line = Base.Transactions.Current;
InventoryItem Item = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>.View.Select(Base, Line.InventoryID).FirstOrDefault();
InventoryItemExt ItemExt = Item.GetExtension<InventoryItemExt>();
结果与预期不符。 Line.InventoryID returns 10045,这是正确的项目。 Item.InventoryID 是 10046
经过调试,我发现新的好用的参数是新的属性 TopFirst。这 returns 第一个结果。
以下代码按预期工作(以及它在 2019 R2 及之前的工作方式!)。
SOLine Line = Base.Transactions.Current;
InventoryItem Item = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>.View.Select(Base, Line.InventoryID).TopFirst;
InventoryItemExt ItemExt = Item.GetExtension<InventoryItemExt>();
我在我的代码中大量使用了 FirstOrDefault(这是一种习惯,我过去经常使用 linq2sql)并在 Acumatica 中使用它。根据开发支持,仅当您期望一个结果时才应使用它。
我在 SOOrderEntry 上有一些代码,通过单击按钮并检查一些内容来获取当前行上的项目。这是在我的图形扩展中。
此代码在升级前有效:
SOLine Line = Base.Transactions.Current;
InventoryItem Item = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>.View.Select(Base, Line.InventoryID).FirstOrDefault();
InventoryItemExt ItemExt = Item.GetExtension<InventoryItemExt>();
结果与预期不符。 Line.InventoryID returns 10045,这是正确的项目。 Item.InventoryID 是 10046
经过调试,我发现新的好用的参数是新的属性 TopFirst。这 returns 第一个结果。
以下代码按预期工作(以及它在 2019 R2 及之前的工作方式!)。
SOLine Line = Base.Transactions.Current;
InventoryItem Item = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>.View.Select(Base, Line.InventoryID).TopFirst;
InventoryItemExt ItemExt = Item.GetExtension<InventoryItemExt>();