Насколько я понял после обширных исследований, вы не можете выполнять подзапросы в Simple.Data. Однако при достаточном количестве объединений и сортировок я иногда видел всплывающее окно CTE, которое могло служить моим целям. Я создал скрипт, чтобы продемонстрировать, чего я хотел бы достичь с помощью Simple.Data (поверх ADO.NET), я просто не могу понять, как структурировать это в запросе simple.data (или наборе запросов) .
Если у меня есть две таблицы:
CREATE TABLE Request
(id int,
payload varchar(50))
;
CREATE TABLE Response
(id int,
requestId int,
payload varchar(50),
sortableValue int,
filterField bit)
;
Как я могу получить отфильтрованный верхний результат дочерней таблицы? например
SELECT *
FROM Request ereq
JOIN
Response eres
ON eres.id = (SELECT TOP 1 id from Response
WHERE requestId = ereq.id AND filterField = 1
ORDER BY sortableValue DESC)
или с КТР
WITH sorted_content AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY requestId ORDER BY sortableValue DESC) as rowId,
*
FROM Response
WHERE filterField = 1
)
SELECT *
FROM Request ereq
JOIN sorted_content sorted_eres
ON sorted_eres.requestId = ereq.id
AND sorted_eres.rowId = 1
http://sqlfiddle.com/#!6/33ac5/17
Цель состоит в том, чтобы иметь возможность выполнять что-то похожее на приведенные выше выражения в выражении Simple.Data, чтобы я мог использовать разбиение по страницам. Если я фильтрую постфактум, пейджинг становится сомнительным/дорогим.