GetAllWithChildren
способ - только удобный способ. Для выполнения пользовательских запросов вы должны использовать метод Table
. Это не должно быть трудно реализовать свой собственный метод выборки с функциональностью, что вы хотите, расширяя уже существующий GetAllWithChildren
:
public static class OrderExtensions {
public static List<T> GetAllWithChildren<T>(this SQLiteConnection conn,
Expression<Func<T, bool>> filter = null,
Expression<Func<T, object>> orderExpr = null,
int? limit = null,
int? offset = null,
bool recursive = false) where T: class
{
var elements = conn.Table<T>();
if (filter != null) {
elements = elements.Where(filter);
}
if (orderExpr != null) {
elements = elements.OrderBy(orderExpr);
}
if (offset != null) {
elements = elements.Skip(offset.Value);
}
if (limit != null) {
elements = elements.Take(limit.Value);
}
var list = elements.ToList();
foreach (T element in list)
{
conn.GetChildren(element, recursive);
}
return list;
}
}
Затем вы можете использовать его как это:
conn.GetAllWithChildren<MyClass>(
filter: o => o.Name != "",
orderBy: o => o.Name,
limit: 10, offset: 20);
или менее многословным (и менее описательной) версии:
conn.GetAllWithChildren<MyClass>(o => o.Name != "", o => o.Name, 10, 20);
благодарит за отзыв. для любого читающего. elements.Skip (offset.Value); должны быть элементами = elements.Skip (offset.Value); иначе пропустить игнорируется. такой же с take. – dss
Обновленный ответ, хороший улов. – redent84