• QueryableHelper


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Reflection;
    using System.Text;
    
    namespace Oyang.Tool
    {
        public class QueryableHelper
        {
            public static IQueryable<TSource> WhereIf<TSource>(IQueryable<TSource> source, bool isTrue, Expression<Func<TSource, bool>> predicate)
            {
                if (isTrue)
                {
                    source = source.Provider.CreateQuery<TSource>(
                    Expression.Call(
                        null,
                        Where_TSource_2(typeof(TSource)),
                        source.Expression, Expression.Quote(predicate)
                        ));
                }
                return source;
            }
    
            private static MethodInfo s_Where_TSource_2;
    
            private static MethodInfo Where_TSource_2(Type TSource) =>
                 (s_Where_TSource_2 ??
                 (s_Where_TSource_2 = new Func<IQueryable<object>, Expression<Func<object, bool>>, IQueryable<object>>(Queryable.Where).GetMethodInfo().GetGenericMethodDefinition()))
                  .MakeGenericMethod(TSource);
    
            public static List<TSource> ToPageList<TSource>(IQueryable<TSource> source, ref int pageIndex, int pageSize, string sortField, bool isAsc, out int totalCount)
            {
                totalCount = source.Count();
                int pageCount = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
                if (pageCount > 0 && pageIndex > pageCount)
                {
                    pageIndex = pageCount;
                }
    
                var param = Expression.Parameter(typeof(TSource));
                var body = Expression.Property(param, sortField);
                dynamic keySelector = Expression.Lambda(body, param);
                source = isAsc ? Queryable.OrderBy(source, keySelector) : Queryable.OrderByDescending(source, keySelector);
                source = source.Skip((pageIndex - 1) * pageSize).Take(pageSize);
                return source.ToList();
            }
    
            public static List<TSource> ToPageList<TSource>(IQueryable<TSource> source, IPagination p)
            {
                int pageIndex = p.PageIndex;
                List<TSource> temp = ToPageList<TSource>(source, ref pageIndex, p.PageSize, p.SortField, p.IsAsc, out int totalCount);
                p.TotalCount = totalCount;
                p.PageIndex = pageIndex;
                return temp;
            }
        }
    }
  • 相关阅读:
    安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
    各种编程语言的深度学习库整理
    十个开源深度学习框架
    深度学习框架的评估与比较
    Caffe 深度学习框架上手教程
    机器视觉开源代码集合
    人工智能的妙用:谷歌公布图像字幕技术
    谷歌推出最新图像识别工具Google Cloud Vision API
    机器学习常见算法分类汇总
    神经网络的分类及其应用
  • 原文地址:https://www.cnblogs.com/oyang168/p/9957340.html
Copyright © 2020-2023  润新知