You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.2 KiB
C#
67 lines
2.2 KiB
C#
using Furion.FriendlyException;
|
|
using Mapster;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Linq.Expressions;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Myshipping.Application.Helper
|
|
{
|
|
public static class MapsterExtHelper
|
|
{
|
|
/// <summary>
|
|
/// 动态获取属性对应关系
|
|
/// </summary>
|
|
/// <typeparam name="TDto"></typeparam>
|
|
/// <typeparam name="TEntity"></typeparam>
|
|
/// <param name="property">字段代码</param>
|
|
/// <returns>返回对应的字段代码</returns>
|
|
public static string GetAdaptProperty<TDto, TEntity>(string property)
|
|
where TDto : class
|
|
where TEntity : class
|
|
{
|
|
try
|
|
{
|
|
var adapt = default(TDto).BuildAdapter().CreateMapExpression<TEntity>().Body as BlockExpression;
|
|
|
|
var tryInfo = adapt.Expressions.FirstOrDefault(a => a.NodeType.ToString() == "Try");
|
|
|
|
if (tryInfo == null)
|
|
throw Oops.Oh($"{nameof(GetAdaptProperty)} 读取TRY异常");
|
|
|
|
var block = ((TryExpression)tryInfo).Body as BlockExpression;
|
|
|
|
if (block == null)
|
|
throw Oops.Oh($"{nameof(GetAdaptProperty)} 读取BlockExpression异常");
|
|
|
|
var blockNode = block.Expressions.FirstOrDefault(t => t.NodeType.ToString() == "Block");
|
|
|
|
var member = (blockNode as BlockExpression).Expressions.Where(t => {
|
|
var right = ((t as BinaryExpression).Right as MemberExpression);
|
|
|
|
if (right == null)
|
|
return false;
|
|
|
|
var currInfo = right.Member;
|
|
|
|
return currInfo.Name.Equals(property, StringComparison.OrdinalIgnoreCase);
|
|
}).FirstOrDefault();
|
|
|
|
if (member != null)
|
|
return ((member as BinaryExpression).Left as MemberExpression).Member.Name;
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw Oops.Oh($"{nameof(GetAdaptProperty)} 读取BlockExpression异常");
|
|
}
|
|
|
|
return string.Empty;
|
|
}
|
|
|
|
|
|
}
|
|
}
|