BQL "IN<>" 语句的问题

Problems with the BQL "IN<>" statement

我的要求是获取实例中定义的所有折扣代码的列表以及特定客户当前分配给哪些折扣代码,在给定 CustomerID=28 的情况下。我还必须仅包含自然适用于客户的折扣代码。其中只有 3 个; “客户”、“客户和项目”、“客户和项目价格 Class”。这些 ARDiscount.ApplicableTo 包含“CU”、“CP”、“CI”

Select a.CompanyID, a.DiscountID, a.DiscountSequenceID, b.ApplicableTo, c.CustomerID
From   DiscountSequence a
  Join ARDiscount b On a.CompanyID = b.CompanyID and a.DiscountID = b.DiscountID
  Left Outer Join DiscountCustomer c On a.CompanyID = c.CompanyID 
                                      And a.DiscountID = c.DiscountID 
                                      And a.DiscountSequenceID = c.DiscountSequenceID 
                                      And (IsNull(c.CustomerID,0) = 0 OR c.CustomerID = 72)
Where  a.CompanyID = 2
  And  b.ApplicableTo In ('CU','CP','CI')
Order By a.DiscountID, a.DiscountSequenceID

我创建了数据视图委托给 return 我需要显示的 4 列以及我创建的视图 为了像上面的 SQL 查询一样读取数据,我使用了这样的 BQL“IN<>”语句。该方法直接取自此处的博客 post: https://asiablog.acumatica.com/2017/11/sql-in-operator-in-bql.html

Object[] applicableTovalues = new String[] { "CP","CI","CU" };   // Customer and Price Class // Customer and Item// Customer

var Results = PXSelectJoin<DiscountSequence
            , InnerJoin<ARDiscount, On<DiscountSequence.discountID, Equal<ARDiscount.discountID>>
            , LeftJoin<DiscountCustomer, On<DiscountSequence.discountID, Equal<DiscountCustomer.discountID>,
                                        And<DiscountSequence.discountSequenceID, Equal<DiscountCustomer.discountSequenceID>,
                                        And<Where<DiscountCustomer.customerID, Equal<Current<Customer.bAccountID>>,
                                               Or<DiscountCustomer.customerID, IsNull>>>>>>>
                , Where<DiscountSequence.discountID, IsNotNull
                , And<ARDiscount.applicableTo, In<Required<ARDiscount.applicableTo>>>>
                , OrderBy<Asc<DiscountSequence.discountID, Asc<DiscountSequence.discountSequenceID>>>
                >.Select(Base, applicableTovalues);

问题是用 TRACE 捕获的结果 SQL 服务器 select 语句只包括三个 IN 值中的第一个 (''CU'') 离开 (CI 和 CU) 出来。 我期望 IN 语句中的所有三个值都是这样的:AND [ARDiscount].[ApplicableTo] IN ( ''CP'', ''CI'', ''CU'')

exec sp_executesql N'SELECT [DiscountSequence].[DiscountID], [DiscountSequence].[DiscountSequenceID], [DiscountSequence].[LineCntr], 
<snip>
[DiscountCustomer].[CreatedDateTime], [DiscountCustomer].[LastModifiedByID], [DiscountCustomer].[LastModifiedByScreenID], [DiscountCustomer].[LastModifiedDateTime]  
FROM [DiscountSequence] [DiscountSequence]  INNER JOIN [ARDiscount] [ARDiscount] ON ( [ARDiscount].[CompanyID] = 2) AND [DiscountSequence].[DiscountID] = [ARDiscount].[DiscountID]  
LEFT JOIN [DiscountCustomer] [DiscountCustomer] ON ( [DiscountCustomer].[CompanyID] = 2) AND [DiscountSequence].[DiscountID] = [DiscountCustomer].[DiscountID] 
AND [DiscountSequence].[DiscountSequenceID] = [DiscountCustomer].[DiscountSequenceID] AND ( [DiscountCustomer].[CustomerID] = @P0 OR [DiscountCustomer].[CustomerID] IS NULL )  
WHERE ( [DiscountSequence].[CompanyID] = 2) 
AND ( [DiscountSequence].[DiscountID] IS NOT NULL  
AND [ARDiscount].[ApplicableTo] IN ( ''CU''))  
ORDER BY [DiscountSequence].[DiscountID], [DiscountSequence].[DiscountSequenceID] 
OPTION(OPTIMIZE FOR UNKNOWN) /* AR.30.30.00 */',N'@P0 int',@P0=39

问题是将数组传递给 'params' 参数。它认为您将参数列表而不是单个数组作为参数传递给 bql 查询。

如果你按如下方式转换它应该可以工作: .Select(Base, (object)applicableTovalues);