From 197f17b6339a21e022192a30ca159b1b95b4ff15 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 30 Jan 2025 11:33:12 +0800 Subject: [PATCH 01/12] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=20NET5=20?= =?UTF-8?q?=E6=A1=86=E6=9E=B6=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/EditorForm/EditorItem.cs | 8 ----- .../Components/Table/TableColumn.cs | 30 ------------------- 2 files changed, 38 deletions(-) diff --git a/src/BootstrapBlazor/Components/EditorForm/EditorItem.cs b/src/BootstrapBlazor/Components/EditorForm/EditorItem.cs index fd8007726bd..8e2859fbfd7 100644 --- a/src/BootstrapBlazor/Components/EditorForm/EditorItem.cs +++ b/src/BootstrapBlazor/Components/EditorForm/EditorItem.cs @@ -12,11 +12,7 @@ namespace BootstrapBlazor.Components; /// EditorItem 组件 /// /// 用于 EditorForm 的 FieldItems 模板内 -#if NET6_0_OR_GREATER public class EditorItem : ComponentBase, IEditorItem -#else -public class EditorItem : ComponentBase, IEditorItem -#endif { /// /// 获得/设置 绑定字段值 @@ -108,9 +104,6 @@ public class EditorItem : ComponentBase, IEditorItem /// 获得/设置 编辑模板 /// [Parameter] -#if NET5_0 - public RenderFragment? EditTemplate { get; set; } -#elif NET6_0_OR_GREATER public RenderFragment? EditTemplate { get; set; } RenderFragment? IEditorItem.EditTemplate @@ -126,7 +119,6 @@ public class EditorItem : ComponentBase, IEditorItem { } } -#endif /// /// 获得/设置 组件类型 默认为 null diff --git a/src/BootstrapBlazor/Components/Table/TableColumn.cs b/src/BootstrapBlazor/Components/Table/TableColumn.cs index 481aaaef341..7a071bd3be5 100644 --- a/src/BootstrapBlazor/Components/Table/TableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/TableColumn.cs @@ -291,27 +291,6 @@ public class TableColumn : BootstrapComponentBase, ITableColumn /// 获得/设置 显示模板 /// [Parameter] -#if NET5_0 - public RenderFragment>? Template { get; set; } - - /// - /// 内部使用负责把 object 类型的绑定数据值转化为泛型数据传递给前端 - /// - RenderFragment? ITableColumn.Template - { - get => Template == null ? null : new RenderFragment(context => builder => - { - // 此处 context 为行数据 - var fieldName = GetFieldName(); - var value = Utility.GetPropertyValue(context, fieldName); - builder.AddContent(0, Template.Invoke(new TableColumnContext(context, value))); - }); - set - { - - } - } -#elif NET6_0_OR_GREATER public RenderFragment>? Template { get; set; } /// @@ -338,15 +317,11 @@ public class TableColumn : BootstrapComponentBase, ITableColumn } } -#endif /// /// 获得/设置 编辑模板 /// [Parameter] -#if NET5_0 - public RenderFragment? EditTemplate { get; set; } -#elif NET6_0_OR_GREATER public RenderFragment? EditTemplate { get; set; } RenderFragment? IEditorItem.EditTemplate @@ -362,16 +337,12 @@ public class TableColumn : BootstrapComponentBase, ITableColumn { } } -#endif /// /// 获得/设置 搜索模板 /// /// [Parameter] -#if NET5_0 - public RenderFragment? SearchTemplate { get; set; } -#elif NET6_0_OR_GREATER public RenderFragment? SearchTemplate { get; set; } RenderFragment? ITableColumn.SearchTemplate @@ -387,7 +358,6 @@ public class TableColumn : BootstrapComponentBase, ITableColumn { } } -#endif /// /// 获得/设置 过滤模板 From 092224a16066f116ef80273e8b51ec6b0c4c60d5 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 30 Jan 2025 11:34:29 +0800 Subject: [PATCH 02/12] =?UTF-8?q?refactor:=20=E7=B2=BE=E7=AE=80=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/LambdaExtensions.cs | 74 ++++++------------- 1 file changed, 23 insertions(+), 51 deletions(-) diff --git a/src/BootstrapBlazor/Extensions/LambdaExtensions.cs b/src/BootstrapBlazor/Extensions/LambdaExtensions.cs index d4fc2316de3..1496bbeacc8 100644 --- a/src/BootstrapBlazor/Extensions/LambdaExtensions.cs +++ b/src/BootstrapBlazor/Extensions/LambdaExtensions.cs @@ -48,17 +48,9 @@ public static Expression> GetFilterLambda(this FilterKe var express = new List>>(); if (filter.Filters != null) { - foreach (var f in filter.Filters) - { - if (f.Filters != null) - { - express.Add(f.Filters.GetFilterLambda(f.FilterLogic)); - } - else - { - express.Add(f.GetInnerFilterLambda()); - } - } + express.AddRange(filter.Filters.Select(f => f.Filters != null + ? f.Filters.GetFilterLambda(f.FilterLogic) + : f.GetInnerFilterLambda())); } else { @@ -94,18 +86,10 @@ public static Expression> GetFilterLambda(this FilterKe /// private static Expression> GetFilterLambda(this IEnumerable filters, FilterLogic logic) { - var express = new List>>(); - foreach (var filter in filters) - { - if (filter.Filters != null) - { - express.Add(filter.Filters.GetFilterLambda(filter.FilterLogic)); - } - else - { - express.Add(filter.GetInnerFilterLambda()); - } - } + var express = filters.Select(filter => filter.Filters != null + ? filter.Filters.GetFilterLambda(filter.FilterLogic) + : filter.GetInnerFilterLambda()) + .ToList(); return express.ExpressionAndLambda(logic); } @@ -665,7 +649,7 @@ public static Expression> GetPropertyValueLambda> GetSimplePropertyExpression() @@ -674,7 +658,7 @@ Expression> GetSimplePropertyExpression() var p = type.GetPropertyByName(propertyName); if (p != null) { - body = Expression.Property(Expression.Convert(param_p1, type), p); + body = Expression.Property(Expression.Convert(parameter, type), p); } else if (type.IsAssignableTo(typeof(IDynamicMetaObjectProvider))) { @@ -682,15 +666,15 @@ Expression> GetSimplePropertyExpression() CSharpBinderFlags.None, propertyName, type, - new[] { CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) }); - body = Expression.Dynamic(binder, typeof(object), param_p1); + [CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null)]); + body = Expression.Dynamic(binder, typeof(object), parameter); } else { throw new InvalidOperationException($"类型 {type.Name} 未找到 {propertyName} 属性,无法获取其值"); } - return Expression.Lambda>(Expression.Convert(body, typeof(TResult)), param_p1); + return Expression.Lambda>(Expression.Convert(body, typeof(TResult)), parameter); } Expression> GetComplexPropertyExpression() @@ -707,16 +691,10 @@ Expression> GetComplexPropertyExpression() { t = propertyInstance.GetType(); } - if (body == null) - { - body = Expression.Property(Expression.Convert(param_p1, type), p); - } - else - { - body = Expression.Property(body, p); - } + + body = Expression.Property(body ?? Expression.Convert(parameter, type), p); } - return Expression.Lambda>(Expression.Convert(body!, typeof(TResult)), param_p1); + return Expression.Lambda>(Expression.Convert(body!, typeof(TResult)), parameter); } } @@ -736,8 +714,8 @@ public static Expression> SetPropertyValueLambda> SetSimplePropertyExpression() @@ -746,8 +724,8 @@ Expression> SetSimplePropertyExpression() //获取设置属性的值的方法 var mi = p.GetSetMethod(true); - var body = Expression.Call(Expression.Convert(param_p1, model.GetType()), mi!, Expression.Convert(param_p2, p.PropertyType)); - return Expression.Lambda>(body, param_p1, param_p2); + var body = Expression.Call(Expression.Convert(parameter1, model.GetType()), mi!, Expression.Convert(parameter2, p.PropertyType)); + return Expression.Lambda>(body, parameter1, parameter2); } Expression> SetComplexPropertyExpression() @@ -764,17 +742,11 @@ Expression> SetComplexPropertyExpression() { t = propertyInstance.GetType(); } - if (body == null) - { - body = Expression.Property(Expression.Convert(param_p1, type), p); - } - else - { - body = Expression.Property(body, p); - } + + body = Expression.Property(body ?? Expression.Convert(parameter1, type), p); } - body = Expression.Assign(body!, param_p2); - return Expression.Lambda>(body, param_p1, param_p2); + body = Expression.Assign(body!, parameter2); + return Expression.Lambda>(body, parameter1, parameter2); } } From 24bdcb591c484e21ba91a4af6d0e418890561df0 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 30 Jan 2025 11:34:40 +0800 Subject: [PATCH 03/12] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Extensions/LambdaExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor/Extensions/LambdaExtensions.cs b/src/BootstrapBlazor/Extensions/LambdaExtensions.cs index 1496bbeacc8..090bc94f921 100644 --- a/src/BootstrapBlazor/Extensions/LambdaExtensions.cs +++ b/src/BootstrapBlazor/Extensions/LambdaExtensions.cs @@ -320,7 +320,7 @@ public static IEnumerable Sort(this IEnumerable items, List } /// - /// IQueryable 排序扩展方法 + /// IQueryable 排序扩展方法 /// /// /// @@ -386,7 +386,7 @@ public static IEnumerable Sort(this IEnumerable items, stri } /// - /// IQueryable 排序扩展方法 + /// IQueryable 排序扩展方法 /// /// /// From a2ed6869a68fbb96a9154a05a38d7d794fc31a1f Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 30 Jan 2025 11:38:48 +0800 Subject: [PATCH 04/12] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=8F=90=E4=BE=9B=E5=8F=AF=E8=AF=BB=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/LambdaExtensions.cs | 65 +++++++------------ 1 file changed, 22 insertions(+), 43 deletions(-) diff --git a/src/BootstrapBlazor/Extensions/LambdaExtensions.cs b/src/BootstrapBlazor/Extensions/LambdaExtensions.cs index 090bc94f921..22f69c43292 100644 --- a/src/BootstrapBlazor/Extensions/LambdaExtensions.cs +++ b/src/BootstrapBlazor/Extensions/LambdaExtensions.cs @@ -274,12 +274,12 @@ public static Expression> CountLambda(Type type) /// public static Expression, List, IEnumerable>> GetSortListLambda() { - var exp_p1 = Expression.Parameter(typeof(IEnumerable)); - var exp_p2 = Expression.Parameter(typeof(List)); + var parameter1 = Expression.Parameter(typeof(IEnumerable)); + var parameter2 = Expression.Parameter(typeof(List)); var mi = typeof(LambdaExtensions).GetMethods().First(m => m.Name == nameof(Sort) && m.ReturnType.Name == typeof(IEnumerable<>).Name && m.GetParameters().Any(p => p.Name == "sortList")).MakeGenericMethod(typeof(TItem)); - var body = Expression.Call(mi, exp_p1, exp_p2); - return Expression.Lambda, List, IEnumerable>>(body, exp_p1, exp_p2); + var body = Expression.Call(mi, parameter1, parameter2); + return Expression.Lambda, List, IEnumerable>>(body, parameter1, parameter2); } /// @@ -305,16 +305,10 @@ public static IEnumerable Sort(this IEnumerable items, List sortOrder = SortOrder.Desc; } } - if (index == 0) - { - // OrderBy - items = EnumerableOrderBy(items, sortName, sortOrder); - } - else - { - // ThenBy - items = EnumerableThenBy(items, sortName, sortOrder); - } + + items = index == 0 + ? EnumerableOrderBy(items, sortName, sortOrder) + : EnumerableThenBy(items, sortName, sortOrder); } return items; } @@ -342,16 +336,7 @@ public static IQueryable Sort(this IQueryable items, List Sort(this IQueryable items, List public static Expression, string, SortOrder, IEnumerable>> GetSortLambda() { - var exp_p1 = Expression.Parameter(typeof(IEnumerable)); - var exp_p2 = Expression.Parameter(typeof(string)); - var exp_p3 = Expression.Parameter(typeof(SortOrder)); + var parameter1 = Expression.Parameter(typeof(IEnumerable)); + var parameter2 = Expression.Parameter(typeof(string)); + var parameter3 = Expression.Parameter(typeof(SortOrder)); var mi = typeof(LambdaExtensions).GetMethods().First(m => m.Name == nameof(Sort) && m.ReturnType.Name == typeof(IEnumerable<>).Name && m.GetParameters().Any(p => p.Name == "sortName")).MakeGenericMethod(typeof(TItem)); - var body = Expression.Call(mi, exp_p1, exp_p2, exp_p3); - return Expression.Lambda, string, SortOrder, IEnumerable>>(body, exp_p1, exp_p2, exp_p3); + var body = Expression.Call(mi, parameter1, parameter2, parameter3); + return Expression.Lambda, string, SortOrder, IEnumerable>>(body, parameter1, parameter2, parameter3); } /// @@ -416,15 +401,9 @@ public static IQueryable Sort(this IQueryable items, string private static PropertyInfo? GetPropertyInfoByName(this PropertyInfo? pi, string propertyName) { - if (pi == null) - { - pi = typeof(TItem).GetPropertyByName(propertyName); - } - else - { - pi = pi.PropertyType.GetPropertyByName(propertyName); - } - return pi; + return pi == null + ? typeof(TItem).GetPropertyByName(propertyName) + : pi.PropertyType.GetPropertyByName(propertyName); } private static IEnumerable EnumerableOrderBy(IEnumerable query, string propertyName, SortOrder sortOrder) @@ -608,13 +587,13 @@ IQueryable QueryableThenByComplex() private static Expression> GetPropertyLambda(PropertyInfo pi) { - var exp_p1 = Expression.Parameter(typeof(TItem)); - return Expression.Lambda>(Expression.Property(exp_p1, pi), exp_p1); + var parameter1 = Expression.Parameter(typeof(TItem)); + return Expression.Lambda>(Expression.Property(parameter1, pi), parameter1); } private static Expression> GetPropertyLambdaByName(string propertyName) { - var exp_p1 = Expression.Parameter(typeof(TItem)); + var parameter1 = Expression.Parameter(typeof(TItem)); PropertyInfo? pi = null; Expression? expression = null; foreach (var name in propertyName.Split('.')) @@ -622,7 +601,7 @@ private static Expression> GetPropertyLambdaByName> GetPropertyLambdaByName>(expression!, exp_p1); + return Expression.Lambda>(expression!, parameter1); } #endregion From cf1578ec0a548e2177cd545f6b69b045d498d76c Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 30 Jan 2025 11:39:26 +0800 Subject: [PATCH 05/12] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Extensions/LambdaExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Extensions/LambdaExtensions.cs b/src/BootstrapBlazor/Extensions/LambdaExtensions.cs index 22f69c43292..e1742e8e278 100644 --- a/src/BootstrapBlazor/Extensions/LambdaExtensions.cs +++ b/src/BootstrapBlazor/Extensions/LambdaExtensions.cs @@ -22,7 +22,7 @@ public static class LambdaExtensions private class ComboExpressionVisitor(ParameterExpression parameter) : ExpressionVisitor { /// - /// + /// /// /// /// From 6a0ef8bb5b832ef2129e49028e6c584ca0d3936c Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 30 Jan 2025 14:56:05 +0800 Subject: [PATCH 06/12] =?UTF-8?q?refactor:=20=E9=87=8D=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{TableColumnTest.cs => InternalTableColumnTest.cs} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename test/UnitTest/Components/{TableColumnTest.cs => InternalTableColumnTest.cs} (99%) diff --git a/test/UnitTest/Components/TableColumnTest.cs b/test/UnitTest/Components/InternalTableColumnTest.cs similarity index 99% rename from test/UnitTest/Components/TableColumnTest.cs rename to test/UnitTest/Components/InternalTableColumnTest.cs index a4b48452c31..1613b821d50 100644 --- a/test/UnitTest/Components/TableColumnTest.cs +++ b/test/UnitTest/Components/InternalTableColumnTest.cs @@ -5,7 +5,7 @@ namespace UnitTest.Components; -public class TableColumnTest +public class InternalTableColumnTest { [Fact] public void InternalTableColumn_Ok() From fbd5480944d4f73787cb621c25eba074034a1bdc Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 30 Jan 2025 15:24:16 +0800 Subject: [PATCH 07/12] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Dynamic/DataTableDynamicObject.cs | 4 ++-- src/BootstrapBlazor/Dynamic/DynamicItemChangedType.cs | 2 +- src/BootstrapBlazor/Dynamic/DynamicObject.cs | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/BootstrapBlazor/Dynamic/DataTableDynamicObject.cs b/src/BootstrapBlazor/Dynamic/DataTableDynamicObject.cs index 5458f818663..343443cac83 100644 --- a/src/BootstrapBlazor/Dynamic/DataTableDynamicObject.cs +++ b/src/BootstrapBlazor/Dynamic/DataTableDynamicObject.cs @@ -18,7 +18,7 @@ public class DataTableDynamicObject : DynamicObject internal DataRow? Row { get; set; } /// - /// + /// /// /// /// @@ -42,7 +42,7 @@ public class DataTableDynamicObject : DynamicObject } /// - /// + /// /// /// /// diff --git a/src/BootstrapBlazor/Dynamic/DynamicItemChangedType.cs b/src/BootstrapBlazor/Dynamic/DynamicItemChangedType.cs index b65b65ec409..dcef3a92eb8 100644 --- a/src/BootstrapBlazor/Dynamic/DynamicItemChangedType.cs +++ b/src/BootstrapBlazor/Dynamic/DynamicItemChangedType.cs @@ -6,7 +6,7 @@ namespace BootstrapBlazor.Components; /// -/// +/// DynamicItemChangedType 类型 /// public enum DynamicItemChangedType { diff --git a/src/BootstrapBlazor/Dynamic/DynamicObject.cs b/src/BootstrapBlazor/Dynamic/DynamicObject.cs index dc2b1c0bc53..15f574e094d 100644 --- a/src/BootstrapBlazor/Dynamic/DynamicObject.cs +++ b/src/BootstrapBlazor/Dynamic/DynamicObject.cs @@ -11,20 +11,20 @@ namespace BootstrapBlazor.Components; public class DynamicObject : IDynamicObject { /// - /// + /// /// [AutoGenerateColumn(Ignore = true)] public Guid DynamicObjectPrimaryKey { get; set; } /// - /// + /// 获得指定属性值方法 /// /// /// public virtual object? GetValue(string propertyName) => Utility.GetPropertyValue(this, propertyName); /// - /// + /// 给指定属性设置值方法 /// /// /// From cdbdd4f8bb1a882c8cfcaa74df42391ee4cf72a6 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 30 Jan 2025 15:24:49 +0800 Subject: [PATCH 08/12] =?UTF-8?q?feat:=20=E5=8A=A8=E6=80=81=E4=B8=8D?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=8D=E6=9D=82=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Dynamic/DataTableDynamicContext.cs | 4 ++-- src/BootstrapBlazor/Dynamic/DataTableDynamicObject.cs | 4 ++-- src/BootstrapBlazor/Dynamic/DynamicObject.cs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/BootstrapBlazor/Dynamic/DataTableDynamicContext.cs b/src/BootstrapBlazor/Dynamic/DataTableDynamicContext.cs index 187674547f9..862afb91e3c 100644 --- a/src/BootstrapBlazor/Dynamic/DataTableDynamicContext.cs +++ b/src/BootstrapBlazor/Dynamic/DataTableDynamicContext.cs @@ -123,7 +123,7 @@ private List BuildItems() { if (!row.IsNull(col)) { - Utility.SetPropertyValue(d, col.ColumnName, row[col]); + Utility.SetPropertyValue(d, col.ColumnName, row[col], false); } } @@ -200,7 +200,7 @@ public override async Task AddAsync(IEnumerable selectedItems) { if (col.DefaultValue != DBNull.Value) { - Utility.SetPropertyValue(dynamicObject, col.ColumnName, col.DefaultValue); + Utility.SetPropertyValue(dynamicObject, col.ColumnName, col.DefaultValue, false); } } dynamicObject.Row = row; diff --git a/src/BootstrapBlazor/Dynamic/DataTableDynamicObject.cs b/src/BootstrapBlazor/Dynamic/DataTableDynamicObject.cs index 343443cac83..4d40c0a763d 100644 --- a/src/BootstrapBlazor/Dynamic/DataTableDynamicObject.cs +++ b/src/BootstrapBlazor/Dynamic/DataTableDynamicObject.cs @@ -33,12 +33,12 @@ public class DataTableDynamicObject : DynamicObject if (!Row.Table.Columns[propertyName]!.AutoIncrement) { // 自增长列 - Row[propertyName] = Utility.GetPropertyValue(this, propertyName); + Row[propertyName] = Utility.GetPropertyValue(this, propertyName, false); } } ret = Row[propertyName]; } - return ret ?? Utility.GetPropertyValue(this, propertyName); + return ret ?? Utility.GetPropertyValue(this, propertyName, false); } /// diff --git a/src/BootstrapBlazor/Dynamic/DynamicObject.cs b/src/BootstrapBlazor/Dynamic/DynamicObject.cs index 15f574e094d..047da1e1e56 100644 --- a/src/BootstrapBlazor/Dynamic/DynamicObject.cs +++ b/src/BootstrapBlazor/Dynamic/DynamicObject.cs @@ -21,12 +21,12 @@ public class DynamicObject : IDynamicObject /// /// /// - public virtual object? GetValue(string propertyName) => Utility.GetPropertyValue(this, propertyName); + public virtual object? GetValue(string propertyName) => Utility.GetPropertyValue(this, propertyName, false); /// /// 给指定属性设置值方法 /// /// /// - public virtual void SetValue(string propertyName, object? value) => Utility.SetPropertyValue(this, propertyName, value); + public virtual void SetValue(string propertyName, object? value) => Utility.SetPropertyValue(this, propertyName, value, false); } From 88dfa18ff67b297746049a45977c9afb2755dddd Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 30 Jan 2025 15:25:48 +0800 Subject: [PATCH 09/12] =?UTF-8?q?feat:=20Lambda=20=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E6=94=AF=E6=8C=81=E5=8F=82=E6=95=B0=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E6=94=AF=E6=8C=81=E5=A4=8D=E6=9D=82=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/LambdaExtensions.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/BootstrapBlazor/Extensions/LambdaExtensions.cs b/src/BootstrapBlazor/Extensions/LambdaExtensions.cs index e1742e8e278..49217a51210 100644 --- a/src/BootstrapBlazor/Extensions/LambdaExtensions.cs +++ b/src/BootstrapBlazor/Extensions/LambdaExtensions.cs @@ -620,8 +620,9 @@ private static Expression> GetPropertyLambdaByName /// /// + /// /// - public static Expression> GetPropertyValueLambda(TModel model, string propertyName) + public static Expression> GetPropertyValueLambda(TModel model, string propertyName, bool supportComplexProperty = true) { if (model == null) { @@ -629,7 +630,10 @@ public static Expression> GetPropertyValueLambda> GetSimplePropertyExpression() { @@ -684,8 +688,9 @@ Expression> GetComplexPropertyExpression() /// /// /// + /// /// - public static Expression> SetPropertyValueLambda(TModel model, string propertyName) + public static Expression> SetPropertyValueLambda(TModel model, string propertyName, bool supportComplexProperty = true) { if (model == null) { @@ -695,7 +700,9 @@ public static Expression> SetPropertyValueLambda> SetSimplePropertyExpression() { From 387f70c53cb1b83340cc22e468428d58918edd55 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 30 Jan 2025 15:28:22 +0800 Subject: [PATCH 10/12] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20SupportCompl?= =?UTF-8?q?exProperty=20=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Services/CacheManager.cs | 47 +++++++++----------- src/BootstrapBlazor/Utils/Utility.cs | 13 +++--- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/BootstrapBlazor/Services/CacheManager.cs b/src/BootstrapBlazor/Services/CacheManager.cs index bed6403e9c3..1e97f30e511 100644 --- a/src/BootstrapBlazor/Services/CacheManager.cs +++ b/src/BootstrapBlazor/Services/CacheManager.cs @@ -513,56 +513,53 @@ public static bool TryGetProperty(Type modelType, string fieldName, [NotNullWhen return propertyInfo != null; } - public static TResult GetPropertyValue(TModel model, string fieldName) + public static TResult GetPropertyValue(TModel model, string fieldName, bool supportComplexProperty) => (model is IDynamicColumnsObject d) + ? (TResult)d.GetValue(fieldName)! + : GetValue(model, fieldName, supportComplexProperty); + + private static TResult GetValue(TModel model, string fieldName, bool supportComplexProperty) { if (model == null) { throw new ArgumentNullException(nameof(model)); } - return (model is IDynamicColumnsObject d) - ? (TResult)d.GetValue(fieldName)! - : GetValue(); - - TResult GetValue() + var type = model.GetType(); + var cacheKey = $"{CacheKeyPrefix}-Lambda-Get-{type.GetUniqueTypeName()}-{typeof(TModel)}-{fieldName}-{typeof(TResult)}-{supportComplexProperty}"; + var invoker = Instance.GetOrCreate(cacheKey, entry => { - var type = model.GetType(); - var cacheKey = $"{CacheKeyPrefix}-Lambda-Get-{type.GetUniqueTypeName()}-{typeof(TModel)}-{fieldName}-{typeof(TResult)}"; - var invoker = Instance.GetOrCreate(cacheKey, entry => + if (type.Assembly.IsDynamic) { - if (type.Assembly.IsDynamic) - { - entry.SetAbsoluteExpiration(TimeSpan.FromSeconds(10)); - } + entry.SetAbsoluteExpiration(TimeSpan.FromSeconds(10)); + } - return LambdaExtensions.GetPropertyValueLambda(model, fieldName).Compile(); - }); - return invoker(model); - } + return LambdaExtensions.GetPropertyValueLambda(model, fieldName, supportComplexProperty).Compile(); + }); + return invoker(model); } - public static void SetPropertyValue(TModel model, string fieldName, TValue value) + public static void SetPropertyValue(TModel model, string fieldName, TValue value, bool supportComplexProperty) { - if (model == null) - { - throw new ArgumentNullException(nameof(model)); - } - if (model is IDynamicColumnsObject d) { d.SetValue(fieldName, value); } else { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + var type = model.GetType(); - var cacheKey = $"{CacheKeyPrefix}-Lambda-Set-{type.GetUniqueTypeName()}-{typeof(TModel)}-{fieldName}-{typeof(TValue)}"; + var cacheKey = $"{CacheKeyPrefix}-Lambda-Set-{type.GetUniqueTypeName()}-{typeof(TModel)}-{fieldName}-{typeof(TValue)}-{supportComplexProperty}"; var invoker = Instance.GetOrCreate(cacheKey, entry => { if (type.Assembly.IsDynamic) { entry.SetAbsoluteExpiration(TimeSpan.FromSeconds(10)); } - return LambdaExtensions.SetPropertyValueLambda(model, fieldName).Compile(); + return LambdaExtensions.SetPropertyValueLambda(model, fieldName, supportComplexProperty).Compile(); }); invoker(model, value); } diff --git a/src/BootstrapBlazor/Utils/Utility.cs b/src/BootstrapBlazor/Utils/Utility.cs index 9f7af8fc289..75b6911cc8b 100644 --- a/src/BootstrapBlazor/Utils/Utility.cs +++ b/src/BootstrapBlazor/Utils/Utility.cs @@ -108,16 +108,18 @@ public static class Utility /// /// /// + /// /// - public static TResult GetPropertyValue(TModel model, string fieldName) => CacheManager.GetPropertyValue(model, fieldName); + public static TResult GetPropertyValue(TModel model, string fieldName, bool supportComplexProperty = true) => CacheManager.GetPropertyValue(model, fieldName, supportComplexProperty); /// /// 获取 指定对象的属性值 /// /// /// + /// /// - public static object? GetPropertyValue(object model, string fieldName) + public static object? GetPropertyValue(object model, string fieldName, bool supportComplexProperty = true) { return model.GetType().Assembly.IsDynamic ? ReflectionInvoke() : LambdaInvoke(); @@ -132,7 +134,7 @@ public static class Utility return ret; } - object? LambdaInvoke() => GetPropertyValue(model, fieldName); + object? LambdaInvoke() => GetPropertyValue(model, fieldName, supportComplexProperty); } /// @@ -143,8 +145,9 @@ public static class Utility /// /// /// + /// /// - public static void SetPropertyValue(TModel model, string fieldName, TValue value) => CacheManager.SetPropertyValue(model, fieldName, value); + public static void SetPropertyValue(TModel model, string fieldName, TValue value, bool supportComplexProperty = true) => CacheManager.SetPropertyValue(model, fieldName, value, supportComplexProperty); /// /// 获得 排序方法 @@ -866,7 +869,7 @@ static Expression> CreateLambda(Type /// /// /// - public static EventCallback CreateCallback(ComponentBase component, object model, string fieldName) => EventCallback.Factory.Create(component, t => CacheManager.SetPropertyValue(model, fieldName, t)); + public static EventCallback CreateCallback(ComponentBase component, object model, string fieldName) => EventCallback.Factory.Create(component, t => CacheManager.SetPropertyValue(model, fieldName, t, true)); /// /// 获得指定泛型的 IEditorItem 集合 From 96adaf1194f649d1f42e78afdba42e3317f2bc10 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 30 Jan 2025 15:28:30 +0800 Subject: [PATCH 11/12] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=E5=8D=95?= =?UTF-8?q?=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/Components/TableTest.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index 94c6c5fcf65..74d75177b07 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -6205,6 +6205,22 @@ public async Task DynamicContext_Add() await cut.InvokeAsync(() => delete.Instance.OnConfirm()); } + [Fact] + public void TableColumn_SupportComplexProperty_Ok() + { + var data = new DataTable(); + data.Columns.Add("Foo.Name", typeof(string)); + data.Rows.Add("test01"); + data.AcceptChanges(); + + var cut = Context.RenderComponent>(pb => + { + pb.Add(a => a.RenderMode, TableRenderMode.Table); + pb.Add(a => a.DynamicContext, new DataTableDynamicContext(data)); + }); + cut.Contains("test01"); + } + [Fact] public async Task IsKeepSelectedRowAfterAdd_Ok() { From 70674ddbe7802ba21228753c506e7c07a03f9106 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 30 Jan 2025 15:29:00 +0800 Subject: [PATCH 12/12] chore: bump version 9.3.1-beta03 --- src/BootstrapBlazor/BootstrapBlazor.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 02fff502375..a377b9c77af 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 9.3.1-beta02 + 9.3.1-beta03