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();
            }

    至此,达到预期效果。

  • 相关阅读:
    Android随笔
    Android随笔
    阅读笔记
    Android随笔
    Android随笔
    Android随笔
    Android随笔
    Java随笔
    Android随笔
    NC20265 着色方案(dp)
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/14244716.html
Copyright © 2011-2022 走看看