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

Posted liangbin-2019-03-30

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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表达式。个人感觉比之前一个参数一个参数的判断然后执行代码显得更加简洁和一目了然。还请各位大佬多多指教

以上是关于C#WebAPI根据参数生成Lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章

C++Lambda表达式作为参数

C++Lambda表达式作为参数

lambda表达式

5Lambda表达式

Lambda表达式的简单使用

python's lambda expression