C#WebAPI根据参数生成Lambda表达式

在项目开发中会遇到很多使用lambda表达式的情况,每次都需要判断条件然后在执行代码,对于一个参数可选的接口来说。实现更麻烦。后来在网上看到这种方法。分享给大家。写的不好的地方多多包涵。
一开始自己尝试动态生成lambda表达式。多次尝试都不尽人意,后来在nuget中发现了linqkit这个工具。个人感觉非常强大。Linqkit Git库中有详细的代码和文档,你完全可以把他的代码clone下来然后根据自己的需要进行修改。

上例子:

public async Task<IHttpActionResult> GetLogInfo(string userName=null,string beginTime=null,string endTime=null,string module=null,int pageIndex=1,int pageSize=20)
        {
            try
            {
                var loggerPredicate = PredicateBuilder.New<Logger>(f=>true);
                if (userName != null)
                {
                    loggerPredicate.And(l=>l.UserName==userName);
                }
                if (beginTime != null)
                {
                    var begintime = DateTime.Parse(beginTime);
                    loggerPredicate.And(l=>l.HappenedTime>=begintime);
                }
                if (endTime != null)
                {
                    var endtime = DateTime.Parse(endTime);
                    loggerPredicate.And(l => l.HappenedTime <= endtime);
                }
                if (module != null)
                {
                    loggerPredicate.And(l=>l.Module==module);
                }

                var loggerList = loggerActionSet.GetPagedList(
                        predicate: loggerPredicate,
                        selector: l => l,
                        orderBy: ll => ll.OrderByDescending(l => l.HappenedTime),
                        pageSize: pageSize,
                        pageIndex: pageIndex - 1
                        );

                return Json(new {
                    result = true,
                    data = new {
                        loggerList.HasNextPage,
                        loggerList.HasPreviousPage,
                        loggerList.PageIndex,
                        loggerList.PageSize,
                        loggerList.TotalCount,
                        loggerList.TotalPages,
                        loggerList.IndexFrom,
                        Items=loggerList.Items.Select(l=> new
                        {
                            l.Id,
                            HappenedTime = l.HappenedTime.ToString("yyyy-MM-dd hh:mm:ss"),
                            l.UserName,
                            l.Module,
                            l.Description,
                            OperationResult = l.OperationResult == true ? "成功" : "失败"
                        }),
                    }
                });

            }
            catch (Exception)
            {
                return Json(new {result=false,msg="系统错误" });
            }
        }

如代码所示。这个webapi中包括4个参数,每个参数都是可选的,linqlit允许你把各个参数进行判断,然后最后生成lambda表达式。个人感觉比之前一个参数一个参数的判断然后执行代码显得更加简洁和一目了然。还请各位大佬多多指教

猜你喜欢

转载自www.cnblogs.com/liangbin-2019-03-30/p/11131986.html