C# 把 List<T> 指定属性的值,赋值给目标对象(列转行)
C# 把 List<T> 指定属性的值,赋值给目标对象。
取 ParamCode 列的值,赋值给一个对象实例。
- 条件:该对象的属性名称对应 ParamCode 的值。
- 应用:系统参数表转换为参数对象。
如下图:
tb_AttendOptions 表

AttendOptions 类
C# 全选
/// <summary>
/// 考勤系统参数,数据来源:tb_AttendOptions 表
/// </summary>
public class AttendOptions
{
public int GracePeriodMinutes { get; set; } = 1;
public int ValidTimeRangeMinutes { get; set; } = 15;
public int ContinueWorkAllowMinutes { get; set; } = 10;
}
扩展方法:SetPropertyValueToObject
C# 全选
/// <summary>
/// C# 把 List<T> 指定属性的值,赋值给目标对象
/// </summary>
/// <typeparam name="TSource">来源对象类型</typeparam>
/// <typeparam name="TTarget">目标对象类型</typeparam>
/// <param name="listSource">来源对象列表</param>
/// <param name="targetObj">目标对象</param>
/// <param name="propertyName">属性名称,该属性的值对应目标对象的属性名称</param>
/// <param name="valuePropertyName">属性值</param>
public static void SetPropertyValueToObject<TSource, TTarget>(this List<TSource> listSource, TTarget targetObj,
string propertyName,
string valuePropertyName)
{
// 参数检查
if (listSource == null || listSource.Count == 0 || targetObj == null)
{
return;
}
// 反射获取属性:List<T>的对象
PropertyInfo sourcePropName = typeof(TSource).GetProperty(propertyName);
PropertyInfo sourcePropValue = typeof(TSource).GetProperty(valuePropertyName);
if (sourcePropName == null || sourcePropValue == null) return;
//循环List,取属性的值
foreach (object o in listSource)
{
var pName = sourcePropName.GetValue(o).ToStringEx();
var pValue = sourcePropValue.GetValue(o);
//目标对象的属性
PropertyInfo targetProp = typeof(TTarget).GetProperty(pName);
if (targetProp != null)
{
//使用类型转换器动态转换属性值
TypeConverter converter = TypeDescriptor.GetConverter(targetProp.PropertyType);
if (converter != null && converter.CanConvertFrom(pValue.GetType()))
{
var convertedValue = converter.ConvertFrom(pValue);
targetProp.SetValue(targetObj, convertedValue);
}
}
}
}
使用方法
C# 全选
var list = _Database.GetQueryable<tb_AttendOptions>().ToList();
var option = new AttendOptions();
list.SetPropertyValueToObject(option, nameof(tb_AttendOptions.ParamCode), nameof(tb_AttendOptions.ParamValue));
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网





