J'ai une configuration de table parent/enfant - Items/ItemDetails. Cette partie fonctionne:ServiceStack.OrmLite Utilisation de la limite dans le filtre SQL.In
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));
Essayer d'ajouter radiomessagerie pour améliorer les performances de cette demande de grands ensembles de données, je vais avoir du mal à obtenir la fonction .Limit (sauter, lignes) à travailler dans la déclaration SQL.In de la table de l'enfant.
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));
Il fonctionne en limitant les résultats dans la première sélection, mais lorsqu'il est utilisé dans les données de l'enfant tirer je reçois « Une seule expression peut être spécifiée dans la liste de sélection lorsque la sous-requête est pas introduite par exists. »
Le SQL qui vient change où le sous-requête à:
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)
Je comprends l'erreur SQL est parce que je choisissais plus d'une colonne dans la clause IN. Y a-t-il une meilleure façon d'écrire ceci pour éviter l'erreur?
Merci
Nous avons toujours des utilisateurs hérités qui n'ont pas mis à niveau au-delà de 2008 R2. – Mark