kentico - Kentico 10 ObjectQuery 连接多个表
问题描述
我基本上是在尝试运行一个查询,为我提供所有购买了具有特定 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 来尝试实现这一点,但不知道如何做到这一点。此处的文档不涵盖我正在寻找的特定类型的场景。我想出这个只是为了尝试看看它是否有效,但我没有得到我在结果中所追求的三列:
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 的了解还不够,无法理解这里的最佳方法。
解决方案
实际上,您创建的 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"], "");
}
推荐阅读
- json - 在 Django 中读取 CSV 文件并以 JSON 形式存储数据
- laravel-5.2 - 如何创建 Web 开发人员文档?
- php - 尽管通知管理员注册成功,但如何解决管理员无法登录问题
- mysql - 在数据库中存储图像(地址与 Blob)
- css - 响应项目在 div 中的宽度
- python - 查找最长连续子数组(未排序)-Python
- java - 如果源对象中的字段不为空,MyBatis 会更新
- ios - 如何在 swift 4.2 中增加 UICollectionview 单元格大小等于屏幕大小?
- python - 循环内的 if 函数内的语法错误
- c++ - 从 c++ CLR/CLI 项目的资源文件加载图像