方法
1.判断集合是否为Null
2.判断集合是否不为Null
3.判断集合是否有值
4.拼接成字符串
5.根据一个表达式去除重复
6.转DataTable 泛型对象转换方法
/// <summary>
/// 集合扩展方法
/// </summary>
public static class ListExtension
{
/// <summary>
/// 判断集合是否为Null
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <returns></returns>
public static bool IsNull<T>(this IEnumerable<T> list)
{
return list == null;
}
/// <summary>
/// 判断集合是否不为Null
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <returns></returns>
public static bool IsNotNull<T>(this IEnumerable<T> list)
{
return list != null;
}
/// <summary>
/// 判断集合是否有值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <returns></returns>
public static bool IsHaveVal<T>(this IEnumerable<T> list)
{
return list != null && list.Count() > 0;
}
/// <summary>
/// 拼接成字符串
/// </summary>
/// <param name="list"></param>
/// <param name="split">分隔筏</param>
/// <returns></returns>
public static string JoinToString(this IEnumerable<int> list, string split)
{
if (list != null)
return string.Join(split, list);
return string.Empty;
}
/// <summary>
/// 拼接成字符串
/// </summary>
/// <param name="list"></param>
/// <param name="split">分隔筏</param>
/// <returns></returns>
public static string JoinToString(this IEnumerable<string> list, string split)
{
if (list != null)
return string.Format("'{0}'",string.Join("'" + split + "'", list));
return string.Empty;
}
/// <summary>
/// 根据一个表达式去除重复
/// </summary>
/// <typeparam name="TSource">数据源类型</typeparam>
/// <typeparam name="TKey">过滤属性类型</typeparam>
/// <param name="source">数据源集合</param>
/// <param name="keySelector">过滤表达式</param>
/// <returns></returns>
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> seenKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
/// <summary>
/// 转DataTable 泛型对象转换方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="items"></param>
/// <returns></returns>
public static DataTable ToDataTable<T>(this List<T> items)
{
DataTable dt = new DataTable(typeof(T).Name);
// 创建列
var props = typeof(T).GetProperties().ToList();
foreach (PropertyInfo prop in props)
{
dt.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}
// 填充数据
foreach (T item in items)
{
DataRow row = dt.NewRow();
foreach (PropertyInfo prop in props)
{
row[prop.Name] = prop.GetValue(item, null) ?? DBNull.Value;
}
dt.Rows.Add(row);
}
return dt;
}
/// <summary>
/// 转DataTable 泛型对象转换方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="items"></param>
/// <param name="columnList">数据库中列集合</param>
/// <returns></returns>
public static DataTable ToDataTableSTMF<T>(this List<T> items, List<string> columnList)
{
DataTable dt = new DataTable(typeof(T).Name);
// 创建列
var props = typeof(T).GetProperties().ToList();
foreach (var colName in columnList)
{
var prop = props.FirstOrDefault(t => t.Name == colName);
dt.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}
int count = 0;
// 填充数据
foreach (T item in items)
{
//if (count > 10)
//{
// break;
//}
DataRow row = dt.NewRow();
foreach (DataColumn itemColumn in dt.Columns)
{
var prop = props.FirstOrDefault(t => t.Name == itemColumn.ColumnName);
switch (prop.PropertyType.Name)
{
case "Int32":
case "Decimal":
row[prop.Name] = prop.GetValue(item, null) ?? 0;
break;
case "String":
row[prop.Name] = prop.GetValue(item, null) ?? string.Empty;
break;
case "Boolean":
var valBit = prop.GetValue(item, null).ToBoolean();
row[prop.Name] = valBit;
break;
default:
row[prop.Name] = prop.GetValue(item, null) ?? string.Empty;
break;
}
}
#region MyRegion
//foreach (PropertyInfo prop in props)
//{
// if (!_insertExcludeColumns.Contains(prop.Name))
// {
// //row[prop.Name] = prop.GetValue(item, null) ?? DBNull.Value;
// switch (prop.PropertyType.Name)
// {
// case "Int32":
// case "Decimal":
// row[prop.Name] = prop.GetValue(item, null) ?? 0;
// break;
// case "String":
// row[prop.Name] = prop.GetValue(item, null) ?? string.Empty;
// break;
// case "Boolean":
// var valBit = prop.GetValue(item, null).ToBoolean();
// row[prop.Name] = valBit;
// break;
// default:
// row[prop.Name] = prop.GetValue(item, null) ?? string.Empty;
// break;
// }
// //row[prop.Name] = prop.GetValue(item, null) ?? DBNull.Value;
// }
//}
#endregion
dt.Rows.Add(row);
count++;
}
return dt;
}
}