2015-12-21 6 views
2

Есть ли способ ограничить/результирующие наборы результатов с помощью GetAllWithChildren() или GetAll() или GetAllWithChildrenAsync() или GetAllAsync().Есть ли способ ограничить/результирующие наборы

Эти методы принимают фильтрующее выражение, но не кажется, что существует простой способ установки явного ограничения или порядка orderby.

ответ

3

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); 
+0

благодарит за отзыв. для любого читающего. elements.Skip (offset.Value); должны быть элементами = elements.Skip (offset.Value); иначе пропустить игнорируется. такой же с take. – dss

+0

Обновленный ответ, хороший улов. – redent84

 Смежные вопросы

  • Нет связанных вопросов^_^