From 0f4cf68f35818462b955bca0a897012795386a7b Mon Sep 17 00:00:00 2001 From: staneee Date: Tue, 6 Jul 2021 12:13:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9A=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=90=8C=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LinqDynamicCoreExtension.cs | 56 +++++++++++++++---- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/src/Riven.System.Linq.Dynamic.Core.Extensions/LinqDynamicCoreExtension.cs b/src/Riven.System.Linq.Dynamic.Core.Extensions/LinqDynamicCoreExtension.cs index 6e01433..5a4e5d8 100644 --- a/src/Riven.System.Linq.Dynamic.Core.Extensions/LinqDynamicCoreExtension.cs +++ b/src/Riven.System.Linq.Dynamic.Core.Extensions/LinqDynamicCoreExtension.cs @@ -12,11 +12,14 @@ namespace System.Linq /// public static class LinqDynamicCoreExtensions { - static char[] SplitChar { get; set; } + const char FieldSplitChar = ','; + static char[] FieldSplitChars { get; set; } + static char[] ArraySplitChar { get; set; } static LinqDynamicCoreExtensions() { - SplitChar = new char[] { '|' }; + FieldSplitChars = new char[] { FieldSplitChar }; + ArraySplitChar = new char[] { '|' }; } @@ -29,8 +32,8 @@ static LinqDynamicCoreExtensions() /// 返回增加了筛选条件的查询器 public static IQueryable Where(this IQueryable query, IEnumerable queryConditions) { - if (query == null - || queryConditions == null + if (query == null + || queryConditions == null || queryConditions.Count() == 0) { return query; @@ -45,6 +48,13 @@ public static IQueryable Where(this IQueryable query, IEnumerable Where(this IQueryable query, IEnumerable Where(this IQueryable query, IEnumerable Where(this IQueryable query, IEnumerable Where(this IQueryable query, IEnumerable WhereIn(this IQueryable query, QueryCondition } var values = condition.Value.Split( - SplitChar, + ArraySplitChar, StringSplitOptions.RemoveEmptyEntries ); if (values == null || values.Length == 0) @@ -258,7 +268,7 @@ public static IQueryable WhereNotIn(this IQueryable query, QueryConditi } var values = condition.Value.Split( - SplitChar, + ArraySplitChar, StringSplitOptions.RemoveEmptyEntries ); if (values == null || values.Length == 0) @@ -281,6 +291,32 @@ public static IQueryable WhereNotIn(this IQueryable query, QueryConditi return query.Where(inFilter.ToString(), values); } + /// + /// 多字段表达式转表达式迭代器 + /// + /// + /// + public static IEnumerable AsEnumerable(this QueryCondition condition) + { + var fields = condition.Field + .Split(FieldSplitChars, StringSplitOptions.RemoveEmptyEntries) + .Select(o => o.Trim()) + .Where(o => !string.IsNullOrWhiteSpace(o)); + + foreach (var field in fields) + { + yield return new QueryCondition() + { + Field = field, + Operator = condition.Operator, + SkipValueIsNull = condition.SkipValueIsNull, + Value = condition.Value + }; + } + + yield break; + } + /// /// 根据排序条件进行排序 ///