Kentico 10 ObjectQuery连接多个表

Kentico 10 ObjectQuery连接多个表,kentico,Kentico,我基本上是在尝试运行一个查询,该查询为我提供购买了具有特定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 J

我基本上是在尝试运行一个查询,该查询为我提供购买了具有特定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
我试图使用ObjectQueryAPI来尝试实现这一点,但不知道如何实现。文档没有涵盖我正在寻找的特定类型的场景。我提出这一点只是想看看它是否有效,但我没有在结果中得到我想要的三列:

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;
var test=OrderItemInfoProvider
.GetOrderItems()
.Source(orderItems=>orderItems.Join(“OrderItemOrderID”、“OrderID”))
.Source(orders=>orders.Join(“OrderCustomerID”、“CustomerID”))
.Source(customers=>customers.Join(“CustomerUserID”、“UserID”))
.WhereEquals(“OrderItemSKUID”,1013)。列(“FirstName”、“LastName”、“Email”)。结果;

我知道这绝对是错误的,我想知道实现这一目标的正确方法。也许在这里使用ObjectQuery不是正确的方法,或者我可以使用原始SQL。我只是对Kentico了解不够,无法理解这里的最佳方法。

实际上,您创建的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"], "");
    }

实际上,您创建的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"], "");
    }

你是对的。我没有正确访问结果。谢谢你给我指明了正确的方向。你说得对。我没有正确访问结果。谢谢你给我指明了正确的方向。