【发布时间】:2017-06-23 03:41:57
【问题描述】:
我有一个父/子表设置 - Items/ItemDetails。这部分有效:
var q = db.From<Item>(); //various where clauses based on request
items = db.Select<Item>(q);
q = q.Select(a => a.ITEM_NO);
itemDetails = db.Select<ItemDetail>(x => Sql.In(x.ITEM_NO, q));
尝试添加分页以提高对大型数据集的请求的性能,我无法让 .Limit(skip, rows) 函数在子表的 SQL.In 语句中工作。
var q = db.From<Item>().Limit(skip, rows);
items = db.Select<Item>(q);
q = q.Select(a => a.ITEM_NO);
itemDetails = db.Select<ItemDetail>(x => Sql.In(x.ITEM_NO, q));
在第一次选择中限制结果时有效,但在子数据拉取中使用时,我得到“当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。”
出来的SQL把where子查询改成:
WHERE "ITEM_NO" IN (SELECT * FROM (SELECT "ITEM_NO", ROW_NUMBER() OVER
(ORDER BY "ITEM"."ITEM_NO") As RowNum
FROM "ITEM") AS RowConstrainedResult WHERE RowNum > 5 AND RowNum <= 15)
我了解 SQL 错误是因为我在 IN 子句中选择了多个列。有没有更好的方法来写这个以避免错误?
谢谢
【问题讨论】:
标签: servicestack ormlite-servicestack