From 54b5af5703f210d6348b416e2aa1d508652fcedc Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Fri, 10 Jun 2022 15:00:58 +0800 Subject: [PATCH 1/3] =?UTF-8?q?test:=20=E4=BF=AE=E5=A4=8D=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E7=9A=84=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Extensions/LambadaExtensionsTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/UnitTest/Extensions/LambadaExtensionsTest.cs b/test/UnitTest/Extensions/LambadaExtensionsTest.cs index ff1ea9368..fec456239 100644 --- a/test/UnitTest/Extensions/LambadaExtensionsTest.cs +++ b/test/UnitTest/Extensions/LambadaExtensionsTest.cs @@ -396,7 +396,7 @@ public class LambadaExtensionsTest [Fact] public void GetKeyValue_Ok() { - Assert.Throws(() => LambdaExtensions.GetKeyValue(null)); + Assert.Throws(() => LambdaExtensions.GetKeyValue(null)); } private abstract class MockFilterActionBase : IFilterAction -- Gitee From dddfd0437f86d35459e059bd081cab1f355c8c73 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Fri, 10 Jun 2022 15:21:07 +0800 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=96=B0=20ToSearch?= =?UTF-8?q?=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/ITableColumnExtensions.cs | 51 +++++++++++++++++++ .../Extensions/TypeEextensions.cs | 46 +---------------- 2 files changed, 52 insertions(+), 45 deletions(-) diff --git a/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs b/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs index 00b9e0343..3027caa82 100644 --- a/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs @@ -79,4 +79,55 @@ public static class IEditItemExtensions if (col.Width != null) dest.Width = col.Width; } } + + /// + /// 将 ITableColumn 集合转化为 IFilterAction 集合 + /// + /// + /// + /// + public static IEnumerable ToSearchs(this IEnumerable columns, string? searchText) + { + var searchs = new List(); + if (!string.IsNullOrEmpty(searchText)) + { + foreach (var col in columns) + { + var type = Nullable.GetUnderlyingType(col.PropertyType) ?? col.PropertyType; + if (type == typeof(bool) && bool.TryParse(searchText, out var @bool)) + { + searchs.Add(new SearchFilterAction(col.GetFieldName(), @bool, FilterAction.Equal)); + } + else if (type.IsEnum && Enum.TryParse(type, searchText, true, out object? @enum)) + { + searchs.Add(new SearchFilterAction(col.GetFieldName(), @enum, FilterAction.Equal)); + } + else if (type == typeof(string)) + { + searchs.Add(new SearchFilterAction(col.GetFieldName(), searchText)); + } + else if (type == typeof(int) && int.TryParse(searchText, out var @int)) + { + searchs.Add(new SearchFilterAction(col.GetFieldName(), @int, FilterAction.Equal)); + } + else if (type == typeof(long) && long.TryParse(searchText, out var @long)) + { + searchs.Add(new SearchFilterAction(col.GetFieldName(), @long, FilterAction.Equal)); + } + else if (type == typeof(short) && long.TryParse(searchText, out var @short)) + { + searchs.Add(new SearchFilterAction(col.GetFieldName(), @short, FilterAction.Equal)); + } + else if (type == typeof(double) && double.TryParse(searchText, out var @double)) + { + searchs.Add(new SearchFilterAction(col.GetFieldName(), @double, FilterAction.Equal)); + } + else if (type == typeof(float) && float.TryParse(searchText, out var @float)) + { + searchs.Add(new SearchFilterAction(col.GetFieldName(), @float, FilterAction.Equal)); + } + } + } + return searchs; + } } diff --git a/src/BootstrapBlazor/Extensions/TypeEextensions.cs b/src/BootstrapBlazor/Extensions/TypeEextensions.cs index 09f5c8c4a..d8e0ec5a8 100644 --- a/src/BootstrapBlazor/Extensions/TypeEextensions.cs +++ b/src/BootstrapBlazor/Extensions/TypeEextensions.cs @@ -8,6 +8,7 @@ using System.Reflection; namespace BootstrapBlazor.Components; +[ExcludeFromCodeCoverage] internal static class TypeEextensions { public static PropertyInfo? GetPropertyByName(this Type type, string propertyName) => type.GetRuntimeProperties().FirstOrDefault(p => p.Name == propertyName); @@ -51,49 +52,4 @@ internal static class TypeEextensions } } } - - public static IEnumerable ToSearchs(this IEnumerable columns, string? searchText) - { - var searchs = new List(); - if (!string.IsNullOrEmpty(searchText)) - { - foreach (var col in columns) - { - var type = Nullable.GetUnderlyingType(col.PropertyType) ?? col.PropertyType; - if (type == typeof(bool) && bool.TryParse(searchText, out var @bool)) - { - searchs.Add(new SearchFilterAction(col.GetFieldName(), @bool, FilterAction.Equal)); - } - else if (type.IsEnum && Enum.TryParse(type, searchText, true, out object? @enum)) - { - searchs.Add(new SearchFilterAction(col.GetFieldName(), @enum, FilterAction.Equal)); - } - else if (type == typeof(string)) - { - searchs.Add(new SearchFilterAction(col.GetFieldName(), searchText)); - } - else if (type == typeof(int) && int.TryParse(searchText, out var @int)) - { - searchs.Add(new SearchFilterAction(col.GetFieldName(), @int, FilterAction.Equal)); - } - else if (type == typeof(long) && long.TryParse(searchText, out var @long)) - { - searchs.Add(new SearchFilterAction(col.GetFieldName(), @long, FilterAction.Equal)); - } - else if (type == typeof(short) && long.TryParse(searchText, out var @short)) - { - searchs.Add(new SearchFilterAction(col.GetFieldName(), @short, FilterAction.Equal)); - } - else if (type == typeof(double) && double.TryParse(searchText, out var @double)) - { - searchs.Add(new SearchFilterAction(col.GetFieldName(), @double, FilterAction.Equal)); - } - else if (type == typeof(float) && float.TryParse(searchText, out var @float)) - { - searchs.Add(new SearchFilterAction(col.GetFieldName(), @float, FilterAction.Equal)); - } - } - } - return searchs; - } } -- Gitee From cd5f78101b60ba0b6bcd861a1fffa42ad8eeb160 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Fri, 10 Jun 2022 15:21:23 +0800 Subject: [PATCH 3/3] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=20ToSearch=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/ITableColumnExtensionsTest.cs | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs b/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs index 26f084594..f128ac586 100644 --- a/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs +++ b/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs @@ -130,4 +130,54 @@ public class ITableColumnExtensionsTest Assert.False(attr.Visible); Assert.Equal(100, attr.Width); } + + [Fact] + public void ToSearchs_Ok() + { + var cols = new MockTableColumn[] + { + new("Test_Name", typeof(string)), + new("Test_Bool", typeof(bool)), + new("Test_NullBool", typeof(bool?)), + new("Test_Enum", typeof(SortOrder)), + new("Test_NullEnum", typeof(SortOrder?)), + new("Test_Int", typeof(int)), + new("Test_NullInt", typeof(int?)), + new("Test_Long", typeof(long)), + new("Test_NullLong", typeof(long?)), + new("Test_Short", typeof(short)), + new("Test_NullShort", typeof(short?)), + new("Test_Float", typeof(float)), + new("Test_NullFloat", typeof(float?)), + new("Test_Double", typeof(double)), + new("Test_NullDouble", typeof(double?)), + new("Test_Decimal", typeof(decimal)), + new("Test_Decimal", typeof(decimal?)), + }; + + // NullOrEmpty + var filters = cols.ToSearchs(null); + Assert.Empty(filters); + filters = cols.ToSearchs(""); + Assert.Empty(filters); + + // bool + filters = cols.ToSearchs("true"); + Assert.Equal(2, filters.Count(f => f.GetFilterConditions().Any(f => f.FieldValue is bool))); + + // Enum + filters = cols.ToSearchs("Asc"); + Assert.Equal(2, filters.Count(f => f.GetFilterConditions().Any(f => f.FieldValue is SortOrder))); + + // Number + filters = cols.ToSearchs("1"); + Assert.Equal(2, filters.Count(f => f.GetFilterConditions().Any(f => f.FieldValue is int))); + Assert.Equal(2, filters.Count(f => f.GetFilterConditions().Any(f => f.FieldValue is short))); + Assert.Equal(2, filters.Count(f => f.GetFilterConditions().Any(f => f.FieldValue is long))); + + filters = cols.ToSearchs("2.1"); + Assert.Equal(2, filters.Count(f => f.GetFilterConditions().Any(f => f.FieldValue is float))); + Assert.Equal(2, filters.Count(f => f.GetFilterConditions().Any(f => f.FieldValue is double))); + Assert.Equal(2, filters.Count(f => f.GetFilterConditions().Any(f => f.FieldValue is decimal))); + } } -- Gitee