Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
 /// <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);
 }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
        }