Kentico 10 ObjectQuery объединяет несколько таблиц - PullRequest
0 голосов
/ 26 марта 2019

Я в основном пытаюсь выполнить запрос, который дает мне всех пользователей, которые приобрели продукт с определенным 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

Я пытался использовать API ObjectQuery, чтобы попытаться достичь этого, но не знаю, как это сделать. Документация здесь не охватывает конкретный тип сценария, который я ищу. Я придумал это только для того, чтобы проверить, работает ли оно, но в результате я не получаю три столбца, которые мне нужны:

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. Я просто недостаточно знаю о Кентико, чтобы понять, как лучше подходить к делу.

1 Ответ

2 голосов
/ 26 марта 2019

На самом деле, 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"], "");
    }
...