6 changed files with 718 additions and 28 deletions
@ -0,0 +1,99 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.IO; |
||||
|
using System.Linq; |
||||
|
using System.Linq.Expressions; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
|
||||
|
namespace Wood.Util |
||||
|
{ |
||||
|
public static class CommonHelper |
||||
|
{ |
||||
|
public static Guid NewGuid |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
return Guid.NewGuid(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public static string NewGuidStr |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
return Guid.NewGuid().ToString(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public static DateTime CurrentTime |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
return DateTime.Now; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public static string CurrentTimeStr |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
DateTime dt = CurrentTime; |
||||
|
return dt.ToString("yyyy-MM-dd HH:mm:ss"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public static string CurrentMachineName |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
return Environment.MachineName; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public static string UserName |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
return "Admin"; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Expression动态拼接+泛型缓存
|
||||
|
/// </summary>
|
||||
|
/// <typeparam name="TIn"></typeparam>
|
||||
|
/// <typeparam name="TOut"></typeparam>
|
||||
|
public class ExpressionGenericMapper<TIn, TOut>//Mapper`2
|
||||
|
{ |
||||
|
private static Func<TIn, TOut> _FUNC = null; |
||||
|
static ExpressionGenericMapper() |
||||
|
{ |
||||
|
ParameterExpression parameterExpression = Expression.Parameter(typeof(TIn), "p"); |
||||
|
List<MemberBinding> memberBindingList = new List<MemberBinding>(); |
||||
|
foreach (var item in typeof(TOut).GetProperties()) |
||||
|
{ |
||||
|
MemberExpression property = Expression.Property(parameterExpression, typeof(TIn).GetProperty(item.Name)); |
||||
|
MemberBinding memberBinding = Expression.Bind(item, property); |
||||
|
memberBindingList.Add(memberBinding); |
||||
|
} |
||||
|
foreach (var item in typeof(TOut).GetFields()) |
||||
|
{ |
||||
|
MemberExpression property = Expression.Field(parameterExpression, typeof(TIn).GetField(item.Name)); |
||||
|
MemberBinding memberBinding = Expression.Bind(item, property); |
||||
|
memberBindingList.Add(memberBinding); |
||||
|
} |
||||
|
MemberInitExpression memberInitExpression = Expression.MemberInit(Expression.New(typeof(TOut)), memberBindingList.ToArray()); |
||||
|
Expression<Func<TIn, TOut>> lambda = Expression.Lambda<Func<TIn, TOut>>(memberInitExpression, new ParameterExpression[] |
||||
|
{ |
||||
|
parameterExpression |
||||
|
}); |
||||
|
_FUNC = lambda.Compile();//拼装是一次性的
|
||||
|
} |
||||
|
public static TOut Trans(TIn t) |
||||
|
{ |
||||
|
return _FUNC(t); |
||||
|
} |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue