您现在的位置是:主页 > Web前端技术 > Web前端技术
.NET 6开发TodoList应用怎么实现数据塑形开发技术
IDCBT2022-01-05【服务器技术】人已围观
简介这篇文章主要介绍“.NET6开发TodoList应用怎么实现数据塑形”,在日常操作中,相信很多人在.NET6开发TodoList应用怎么实现数据塑形问题上存在疑惑,小编查阅了各式资料,整理出简单好用
这篇文章主要介绍“.NET 6开发TodoList应用怎么实现数据塑形”,在日常操作中,相信很多人在.NET 6开发TodoList应用怎么实现数据塑形问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”.NET 6开发TodoList应用怎么实现数据塑形”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
- 需求
在查询的场景中,还有一类需求不是很常见,就是在前端请求中指定返回的字段,所以关于搜索的最后一个主题我们就来演示一下关于数据塑形(Data Shaping)。
目标实现数据塑形搜索请求。
原理与思路对于数据塑形来说,我们需要定义一些接口和泛型类实现来完成通用的功能,然后修改对应的查询请求,实现具体的功能。
实现定义通用接口和泛型类实现IDataShaper.cs
using System.Dynamic; namespace TodoList.Application.Common.Interfaces; public interface IDataShaper<T> { IEnumerable<ExpandoObject> ShapeData(IEnumerable<T> entities, string fieldString); ExpandoObject ShapeData(T entity, string fieldString); }
并实现通用的功能:
DataShaper.cs
using System.Dynamic; using System.Reflection; using TodoList.Application.Common.Interfaces; namespace TodoList.Application.Common; public class DataShaper<T> : IDataShaper<T> where T : class { public PropertyInfo[] Properties { get; set; } public DataShaper() { Properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); } public IEnumerable<ExpandoObject> ShapeData(IEnumerable<T> entities, string? fieldString) { var requiredProperties = GetRequiredProperties(fieldString); return GetData(entities, requiredProperties); } public ExpandoObject ShapeData(T entity, string? fieldString) { var requiredProperties = GetRequiredProperties(fieldString); return GetDataForEntity(entity, requiredProperties); } private IEnumerable<PropertyInfo> GetRequiredProperties(string? fieldString) { var requiredProperties = new List<PropertyInfo>(); if (!string.IsNullOrEmpty(fieldString)) { var fields = fieldString.Split(',', StringSplitOptions.RemoveEmptyEntries); foreach (var field in fields) { var property = Properties.FirstOrDefault(pi => pi.Name.Equals(field.Trim(), StringComparison.InvariantCultureIgnoreCase)); if (property == null) { continue; } requiredProperties.Add(property); } } else { requiredProperties = Properties.ToList(); } return requiredProperties; } private IEnumerable<ExpandoObject> GetData(IEnumerable<T> entities, IEnumerable<PropertyInfo> requiredProperties) { return entities.Select(entity => GetDataForEntity(entity, requiredProperties)).ToList(); } private ExpandoObject GetDataForEntity(T entity, IEnumerable<PropertyInfo> requiredProperties) { var shapedObject = new ExpandoObject(); foreach (var property in requiredProperties) { var objectPropertyValue = property.GetValue(entity); shapedObject.TryAdd(property.Name, objectPropertyValue); } return shapedObject; } }标签:很赞哦! ()