改进你的代码-扩展了一下IEnumerableT
生活随笔
收集整理的這篇文章主要介紹了
改进你的代码-扩展了一下IEnumerableT
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
背景
今天用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();}至此,達到預期效果。
總結
以上是生活随笔為你收集整理的改进你的代码-扩展了一下IEnumerableT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在.NET Core 中收集数据的几种方
- 下一篇: C# 在自定义的控制台输出重定向类中整合