/// <summary> /// 處理在Index ViewModel所需要做的事情 /// </summary> /// <typeparam name="TSearchForm">搜索form的形態</typeparam> /// <typeparam name="TPageResult">搜索結果的形態</typeparam> /// <param name="searchViewModel">搜索相關的viewmodel</param> /// <param name="wherePredicate">當不用預設的where處理邏輯的時候,傳入的自訂where條件</param> /// <param name="includes">需要Include進來的其他Entity</param> public virtual void ProcessIndexViewModel <TSearchForm, TPageResult>(Common.Base.ISearchViewModelBase <TSearchForm, TPageResult> searchViewModel, System.Linq.Expressions.Expression <Func <T, bool> > wherePredicate = null, params System.Linq.Expressions.Expression <Func <T, object> >[] includes) where TSearchForm : Common.Base.ISearchFormViewModelBase, new() { var data = db.Repository <T>().Reads(); foreach (var item in includes) { data.Include(item); } // 如果沒有where條件,表示依照預設邏輯 if (wherePredicate == null) { // 當沒有給filter條件並且搜索條件屬於前台看的 if (searchViewModel.SearchForm is IFrontViewModel) { SearchViewModelProcess.ApplySearchFormForFront <T, TSearchForm, TPageResult>(data, searchViewModel); } else { SearchViewModelProcess.ApplySearchForm <T, TSearchForm, TPageResult>(data, searchViewModel); } } else { SearchViewModelProcess.ApplySearchForm <T, TSearchForm, TPageResult>(data, searchViewModel, wherePredicate); } }
/// <summary> /// TODO: 此方法需要重構 /// 把Search Form Viewmodel的OrderBy和Where條件apply上去。 /// 會把最終內容儲存到SearchViewModelBase.Result裡面。 /// </summary> /// <typeparam name="T">EF 的Entity</typeparam> /// <typeparam name="TSearchForm">Search Form ViewModel的Type</typeparam> /// <typeparam name="TPageResult">Search結果的VieModel type</typeparam> /// <param name="data">原始的IQueryable</param> /// <param name="searchForm">SearchForm ViewModel</param> /// <param name="where">where 條件</param> public static void ApplySearchForm <T, TSearchForm, TPageResult>(IQueryable <T> data, Common.Base.ISearchViewModelBase <TSearchForm, TPageResult> searchForm, Expression <Func <T, bool> > where) where TSearchForm : Core.Common.Base.ISearchFormViewModelBase, new() { data = data.Where(where); ApplyOrderByAndToPageResult <T, TSearchForm, TPageResult>(data, searchForm); }
/// <summary> /// 用IndexViewModel產生出要匯出的內容 /// </summary> /// <typeparam name="TSearchForm">搜索form的形態</typeparam> /// <typeparam name="TPageResult">搜索結果的形態</typeparam> /// <param name="searchViewModel">搜索相關的viewmodel</param> /// <param name="wherePredicate">傳入要匯出的資料條件</param> /// <param name="includes">需要Include進來的其他Entity</param> public virtual void ProcessExportViewModel <TSearchForm, TPageResult>(Common.Base.ISearchViewModelBase <TSearchForm, TPageResult> searchViewModel, System.Linq.Expressions.Expression <Func <T, bool> > wherePredicate = null, params System.Linq.Expressions.Expression <Func <T, object> >[] includes) where TSearchForm : Common.Base.ISearchFormViewModelBase, new() { var data = db.Repository <T>().Reads(); foreach (var item in includes) { data.Include(item); } SearchViewModelProcess.ApplySearchForm <T, TSearchForm, TPageResult>(data, searchViewModel, wherePredicate); }
/// <summary> /// Apply Orderby並且把最後結果塞到SearchViewModelBase.Result裡面。 /// </summary> /// <typeparam name="T">EF 的Entity</typeparam> /// <typeparam name="TSearchForm">Search Form ViewModel的Type</typeparam> /// <typeparam name="TPageResult">Search結果的VieModel type</typeparam> /// <param name="data">原始的IQueryable</param> /// <param name="searchForm">Search Form ViewModel</param> private static void ApplyOrderByAndToPageResult <T, TSearchForm, TPageResult>(IQueryable <T> data, Common.Base.ISearchViewModelBase <TSearchForm, TPageResult> searchForm) where TSearchForm : Common.Base.ISearchFormViewModelBase, new() { data = data.DynamicOrderBy(searchForm.SearchForm); searchForm.Result = data.Project().To <TPageResult>().ToPagedList(searchForm.SearchForm.Page, searchForm.SearchForm.PageSize); }
/// <summary> /// 會過濾前台顯示需要的三個條件 - IsEnable和上下架的日期 /// 會把最終內容儲存到SearchViewModelBase.Result裡面。 /// </summary> /// <typeparam name="T">EF 的Entity</typeparam> /// <typeparam name="TSearchForm">Search Form ViewModel的Type</typeparam> /// <typeparam name="TPageResult">Search結果的VieModel type</typeparam> /// <param name="data">原始的IQueryable</param> /// <param name="searchForm">Search Form ViewModel</param> public static void ApplySearchFormForFront <T, TSearchForm, TPageResult>(IQueryable <T> data, Common.Base.ISearchViewModelBase <TSearchForm, TPageResult> searchForm) where TSearchForm : Core.Common.Base.ISearchFormViewModelBase, new() { data = data.WhereForFrontDisplay(); ApplySearchForm <T, TSearchForm, TPageResult>(data, searchForm); }
/// <summary> /// 把Search Form Viewmodel的OrderBy和Where條件apply上去。 /// 會把最終內容儲存到SearchViewModelBase.Result裡面。 /// </summary> /// <typeparam name="T">EF 的Entity</typeparam> /// <typeparam name="TSearchForm">Search Form ViewModel的Type</typeparam> /// <typeparam name="TPageResult">Search結果的VieModel type</typeparam> /// <param name="data">原始的IQueryable</param> /// <param name="searchForm">Search Form ViewModel</param> public static void ApplySearchForm <T, TSearchForm, TPageResult>(IQueryable <T> data, Common.Base.ISearchViewModelBase <TSearchForm, TPageResult> searchForm) where TSearchForm : Core.Common.Base.ISearchFormViewModelBase, new() { data = data.DynamicWhere(searchForm.SearchForm); ApplyOrderByAndToPageResult <T, TSearchForm, TPageResult>(data, searchForm); }