public IList <ShoppingList> List() { var options = new GetShoppingListOptions { LoadItems = loadItems }; return(context.GetShoppingLists(listsToLoad, options)); }
public ShoppingList[] GetShoppingLists(IList <ShoppingList> lists, GetShoppingListOptions options) { throw new NotImplementedException(); }
public ShoppingList[] GetShoppingLists(AuthIdentity identity, IList<ShoppingList> lists, GetShoppingListOptions options) { using (var session = this.GetSession()) { var loadDef = true; var query = session.QueryOver<ShoppingLists>() .Where(p => p.UserId == identity.UserId); if (lists != null) { loadDef = lists.Contains(ShoppingList.Default); var ids = lists.Where(l => l.Id.HasValue).Select(l => l.Id.Value).ToArray(); query = query.AndRestrictionOn(x => x.ShoppingListId).IsInG(ids); } var shoppingListses = query.List(); var ret = new List<ShoppingList>(); if (loadDef) { ret.Add(ShoppingList.Default); } ret.AddRange(shoppingListses.Select(l => l.AsShoppingList())); if (!options.LoadItems) { return ret.ToArray(); } // Load items into each list ICriterion filter = loadDef ? Restrictions.Or(Restrictions.IsNull("ShoppingList"), Restrictions.InG("ShoppingList", shoppingListses)) // Menu can be null, or in loaded menu list : Restrictions.InG("ShoppingList", shoppingListses); // Menu must be in loaded menu list var shoppingListItemses = session.QueryOver<ShoppingListItems>() .Fetch(prop => prop.Ingredient).Eager .Fetch(prop => prop.Recipe).Eager .Where(p => p.UserId == identity.UserId) .Where(filter) .List(); return ret.Select(m => new ShoppingList( m.Id, m.Title, (m.Id.HasValue ? shoppingListItemses.Where(f => f.ShoppingList != null && f.ShoppingList.ShoppingListId == m.Id) : shoppingListItemses.Where(f => f.ShoppingList == null)).Select(r => r.AsShoppingListItem()))).ToArray(); } }
/// <summary> /// Returns one or more saved shopping lists from the current user. /// </summary> /// <param name="lists">A list of ShoppingList objects indicating the ID of the list to load, or ShoppingList.Default for the default list.</param> /// <param name="options">Indicates what data to load. Use GetShoppingListOptions.None to simply load the names of the lists.</param> /// <returns>An array of ShoppingList objects with all the desired properties loaded.</returns> public virtual ShoppingList[] GetShoppingLists(IList <ShoppingList> lists, GetShoppingListOptions options) { return(Adapter.GetShoppingLists(Identity, lists, options)); }
public ShoppingList[] GetShoppingLists(AuthIdentity identity, IList <ShoppingList> lists, GetShoppingListOptions options) { using (var session = GetSession()) { var loadDef = true; var query = session.QueryOver <Models.ShoppingLists>() .Where(p => p.UserId == identity.UserId); if (lists != null) // Load individual lists { loadDef = lists.Contains(ShoppingList.Default); var ids = lists.Where(l => l.Id.HasValue).Select(l => l.Id.Value).ToArray(); query = query.AndRestrictionOn(x => x.ShoppingListId).IsInG(ids); } var dbLists = query.List(); var ret = new List <ShoppingList>(); if (loadDef) { ret.Add(ShoppingList.Default); } ret.AddRange(dbLists.Select(l => l.AsShoppingList())); if (!options.LoadItems) // We're done! { return(ret.ToArray()); } // Load items into each list ICriterion filter = (loadDef ? Expression.Or(Expression.IsNull("ShoppingList"), Expression.InG("ShoppingList", dbLists)) // Menu can be null, or in loaded menu list : Expression.InG("ShoppingList", dbLists)); // Menu must be in loaded menu list var dbItems = session.QueryOver <ShoppingListItems>() .Fetch(prop => prop.Ingredient).Eager .Fetch(prop => prop.Recipe).Eager .Where(p => p.UserId == identity.UserId) .Where(filter) .List(); return(ret.Select(m => new ShoppingList( m.Id, m.Title, (m.Id.HasValue ? dbItems.Where(f => f.ShoppingList != null && f.ShoppingList.ShoppingListId == m.Id) : dbItems.Where(f => f.ShoppingList == null)).Select(r => r.AsShoppingListItem()) )).ToArray()); } }