zoukankan      html  css  js  c++  java
  • 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表达式。个人感觉比之前一个参数一个参数的判断然后执行代码显得更加简洁和一目了然。还请各位大佬多多指教

  • 相关阅读:
    通联支付相关注意事项
    账号配置vue版本的扫码下单以及对店铺进行装修的步骤
    银盒子扫码下单在线订单开启商品售卖时段使用说明
    ERP承接新后台优惠规则问题
    简易付安装后无法使用
    ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇
    ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证
    ASP.NET没有魔法——ASP.NET MVC 过滤器(Filter)
    ASP.NET没有魔法——ASP.NET Identity与授权
    ASP.NET没有魔法——ASP.NET Identity的加密与解密
  • 原文地址:https://www.cnblogs.com/liangbin-2019-03-30/p/11131986.html
Copyright © 2011-2022 走看看