我基本上是在尝试运行一个查询,该查询向我提供所有购买了具有特定SKU产品的用户。本质上是此SQL:
SELECT u.FirstName, u.LastName, u.Email
FROM COM_OrderItem oi INNER JOIN COM_Order o ON oi.OrderItemOrderID = o.OrderID
INNER JOIN COM_Customer c ON o.OrderCustomerID = c.CustomerID
INNER JOIN CMS_User u ON c.CustomerUserID = u.UserID
WHERE oi.OrderItemSKUID = 1013
我试图使用ObjectQuery API尝试实现这一目标,但不知道如何实现。 here文档未涵盖我要查找的特定类型的场景。我想出了这个方法只是想看看它是否有效,但是在结果中我没有得到我要关注的三列:
var test = OrderItemInfoProvider
.GetOrderItems()
.Source(orderItems => orderItems.Join<OrderInfo>("OrderItemOrderID", "OrderID"))
.Source(orders => orders.Join<CustomerInfo>("OrderCustomerID", "CustomerID"))
.Source(customers => customers.Join<UserInfo>("CustomerUserID", "UserID"))
.WhereEquals("OrderItemSKUID", 1013).Columns("FirstName", "LastName", "Email").Result;
我知道这绝对是错误的,我想知道实现此目标的正确方法。也许在这里使用ObjectQuery不是正确的方法,或者我可以以某种方式使用原始SQL。我对Kentico的了解不足,无法了解这里的最佳方法。
答案 0 :(得分:2)
实际上,您创建的ObjectQuery是正确的。我对其进行了测试,它提供了正确的结果。您是否确定系统中确实存在包含SKUID 1013的产品的订单(您可以在COM_OrderItem数据库表中检查该订单)?
此外,您如何访问结果?遍历结果应如下所示:
foreach (DataRow row in test.Tables[0].Rows)
{
string firstName = ValidationHelper.GetString(row["FirstName"], "");
string lastName = ValidationHelper.GetString(row["LastName"], "");
string email = ValidationHelper.GetString(row["Email"], "");
}