Acumatica BQL多次使用同一表进行查询

Acumatica BQL多次使用同一表进行查询,acumatica,Acumatica,我尝试多次使用同一个表构建BQL查询。在下面的示例中,我尝试使用POVendorInventory,因为它与项目和每个项目仓库的默认值相关(查询中两次列出该表的原因) 如何在Acumatica BQL查询中执行此操作。我目前的查询是: foreach (PXResult<INItemSite, InventoryItem, POVendorInventory, POVendorInventory> result in PXSelectJoin<INItemSite,

我尝试多次使用同一个表构建BQL查询。在下面的示例中,我尝试使用POVendorInventory,因为它与项目和每个项目仓库的默认值相关(查询中两次列出该表的原因)

如何在Acumatica BQL查询中执行此操作。我目前的查询是:

foreach (PXResult<INItemSite, InventoryItem, POVendorInventory, POVendorInventory> result in PXSelectJoin<INItemSite,
        InnerJoin<InventoryItem, On<INItemSite.inventoryID, Equal<InventoryItem.inventoryID>>,
        LeftJoin<POVendorInventory, On<InventoryItem.inventoryID, Equal<POVendorInventory.inventoryID>
            , And<InventoryItem.preferredVendorID, Equal<POVendorInventory.vendorID>
            , And<InventoryItem.preferredVendorLocationID, Equal<POVendorInventory.vendorLocationID>>>>,
        LeftJoin<POVendorInventory, On<INItemSite.preferredVendorID, Equal<POVendorInventory.vendorID>,
                And<INItemSite.inventoryID, Equal<POVendorInventory.inventoryID>>>>>>,
            Where<InventoryItem.stkItem, Equal<boolTrue>>,
            OrderBy<Asc<INItemSite.inventoryID, Asc<INItemSite.siteID>>>>.Select(graph))
        {
            var poVendorInventoryDefault = (POVendorInventory)result[2];
            var poVendorInventorySite = (POVendorInventory)result[3];
        }
以下方法也不起作用

[Serializable]
public class POVendorInventoryTwo : POVendorInventory{}

PXResult<INItemSite, InventoryItem, POVendorInventoryTwo, POVendorInventory> result in PXSelectJoin<INItemSite,
        InnerJoin<InventoryItem, On<INItemSite.inventoryID, Equal<InventoryItem.inventoryID>>,
        LeftJoin<POVendorInventoryTwo, On<InventoryItem.inventoryID, Equal<POVendorInventoryTwo.inventoryID>
            , And<InventoryItem.preferredVendorID, Equal<POVendorInventoryTwo.vendorID>
            , And<InventoryItem.preferredVendorLocationID, Equal<POVendorInventoryTwo.vendorLocationID>>>>,
        LeftJoin<POVendorInventory, On<INItemSite.preferredVendorID, Equal<POVendorInventory.vendorID>,
                And<INItemSite.inventoryID, Equal<POVendorInventory.inventoryID>>>>>>,
            Where<InventoryItem.stkItem, Equal<boolTrue>>,
            OrderBy<Asc<INItemSite.inventoryID, Asc<INItemSite.siteID>>>>.Select(graph)
[可序列化]
公共类POVendorInventory二:POVendorInventory{}
PXSelectJoin.Select中的PXResult结果(图形)
但正如答案所提到的,第二次使用时需要使用POVendorInventoryTwo,如下所示:

PXResult<INItemSite, InventoryItem, POVendorInventory, POVendorInventoryTwo> result in PXSelectJoin<INItemSite,
        InnerJoin<InventoryItem, On<INItemSite.inventoryID, Equal<InventoryItem.inventoryID>>,
        LeftJoin<POVendorInventory, On<InventoryItem.inventoryID, Equal<POVendorInventory.inventoryID>
            , And<InventoryItem.preferredVendorID, Equal<POVendorInventory.vendorID>
            , And<InventoryItem.preferredVendorLocationID, Equal<POVendorInventory.vendorLocationID>>>>,
        LeftJoin<POVendorInventoryTwo, On<INItemSite.preferredVendorID, Equal<POVendorInventoryTwo.vendorID>,
                And<INItemSite.inventoryID, Equal<POVendorInventoryTwo.inventoryID>>>>>>,
            Where<InventoryItem.stkItem, Equal<boolTrue>>,
            OrderBy<Asc<INItemSite.inventoryID, Asc<INItemSite.siteID>>>>.Select(graph)
PXResult生成PXSelectJoin.Select(图形)

我过去所做的是将DAC子类化并查询掉它

大概是这样的:

public class POVendorInventoryTwo : POVendorInventory
{}

然后在您的BQL中,将此子类版本用于第二个值。

我在第一个POVendorInventory上尝试了此方法,但它不起作用,但是在第二个POVendorInventory上使用它时,它似乎起作用。奇怪的是,如果第一次提到POVendorInventory时它不起作用,那么第二次就不会起作用了。谢谢你的快速回复。第二种用法有效(只是不像我曾经尝试过的第一种用法),这很奇怪。我本以为这两种方法都适用,但根据它构建SQL查询的方式,我可以大致看出顺序的重要性。我总是使用子类项作为第二个+值
public class POVendorInventoryTwo : POVendorInventory
{}