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>();