zoukankan      html  css  js  c++  java
  • 改进你的代码-扩展了一下IEnumerable<T>

    背景

    今天用EF写东西,觉得IEnumerable里面写where()条件老是写if判断很麻烦,

    这样:

     if (!string.IsNullOrWhiteSpace(key))
                {
                    list = list.Where(u => u.Name.Contains(key)).ToList();
                }
                if (!string.IsNullOrWhiteSpace(key))
                {
                    list = list.Where(u => u.Name.Contains(key)).ToList();
                }
                ..........

    是不是能想点其他办法。

    解决办法

    我似乎知道该怎么做了。现在要实现一个功能,就是要把一个IQueryable<T> ,

    如果condition指定的条件成立便执行predicate子句。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Threading.Tasks;
    
    namespace WebApplication47
    {
        public static class CollectionsExtensions
        {
            //
            // 摘要:
            //     如果condition指定的条件成立便执行predicate子句。
            //
            // 参数:
            //   source:
            //
            //   predicate:
            //
            //   condition:
            //
            // 类型参数:
            //   T:
            public static IQueryable<T> WhereIf<T>(this IQueryable<T> source, Expression<Func<T, bool>> predicate, bool condition)
            {
                if (condition)
                {
                    source = source.Where(predicate);
                }
                return source;
            }
    
            //
            // 摘要:
            //     如果condition指定的条件成立便执行predicate子句。
            //
            // 参数:
            //   source:
            //
            //   predicate:
            //
            //   condition:
            //
            // 类型参数:
            //   T:
            public static IEnumerable<T> WhereIf<T>(this IEnumerable<T> source, Func<T, bool> predicate, bool condition)
            {
                if (condition)
                {
                    source = source.Where(predicate);
                }
                return source;
            }
        }
    }

    测试效果

    然后试着用EF读取数据库

     public IActionResult Index()
            {
                List<Reptiles1688ImageSearch> list = new List<Reptiles1688ImageSearch>();
                list.Add(new Reptiles1688ImageSearch() { Name = "test" });
                string key = "";
                //if (!string.IsNullOrWhiteSpace(key))
                //{
                //    list = list.Where(u => u.Name.Contains(key)).ToList();
                //}
                //if (!string.IsNullOrWhiteSpace(key))
                //{
                //    list = list.Where(u => u.Name.Contains(key)).ToList();
                //}
                //..........
    
    
                var data = list.WhereIf(u => u.Name.Contains(key), !string.IsNullOrWhiteSpace(key)).ToList();
    
                return View();
            }

    至此,达到预期效果。

  • 相关阅读:
    python ping监控
    MongoDB中一些命令
    进制转换(十进制转十六进制 十六进制转十进制)
    通过ssh建立点对点的隧道,实现两个子网通信
    linux环境下的各种后台执行
    python requests请求指定IP的域名
    不需要修改/etc/hosts,curl直接解析ip请求域名
    MongoDB数据update的坑
    windows平台使用Microsoft Visual C++ Compiler for Python 2.7编译python扩展
    rabbitmq问题之HTTP access denied: user 'guest'
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/14244716.html
Copyright © 2011-2022 走看看