using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace MyTest
{
public static class DatabaseExtension
{
public static List<T> ToList<T>(this DataTable dt) where T : class,new()
{
Type t = typeof(T);
PropertyInfo[] propertys = t.GetProperties();
List<T> lst = new List<T>();
string typeName = string.Empty;
foreach (DataRow dr in dt.Rows)
{
T entity = new T();
foreach (PropertyInfo pi in propertys)
{
typeName = pi.Name;
if (dt.Columns.Contains(typeName))
{
if (!pi.CanWrite) continue;
object value = dr[typeName];
if (value == DBNull.Value) continue;
if (pi.PropertyType == typeof(string))
{
pi.SetValue(entity, value.ToString(), null);
}
else if (pi.PropertyType == typeof(int) || pi.PropertyType == typeof(int?))
{
pi.SetValue(entity, int.Parse(value.ToString()), null);
}
else if (pi.PropertyType == typeof(DateTime?) || pi.PropertyType == typeof(DateTime))
{
pi.SetValue(entity, DateTime.Parse(value.ToString()), null);
}
else if (pi.PropertyType == typeof(float) || pi.PropertyType == typeof(float?))
{
pi.SetValue(entity, float.Parse(value.ToString()), null);
}
else if (pi.PropertyType == typeof(double) || pi.PropertyType == typeof(double?))
{
pi.SetValue(entity, double.Parse(value.ToString()), null);
}
else if (pi.PropertyType == typeof(byte) || pi.PropertyType == typeof(byte?))
{
pi.SetValue(entity, byte.Parse(value.ToString()), null);
}
else if (pi.PropertyType == typeof(Int16) || pi.PropertyType == typeof(Int16?))
{
pi.SetValue(entity, Int16.Parse(value.ToString()), null);
}
else
{
pi.SetValue(entity, value, null);
}
}
}
lst.Add(entity);
}
return lst;
}
public static IEnumerable<TElement> ProcedureQuery<TElement>(this Database db, string sp, params SqlParameter[] parameters)
{
string sql = "";
for (int i = 0; i < parameters.Length; i++)
{
sql += " " + parameters[i].ParameterName + " = {" + i + "},";
}
sql = "EXEC " + sp + " " + sql.TrimEnd(',');
return db.SqlQuery<TElement>(sql, parameters.Select(p => p.Value).ToArray());
}
public static IQueryable<TEntity> WhereIn<TEntity, TValue>(this IQueryable<TEntity> source, Expression<Func<TEntity, TValue>> valueSelector,
IEnumerable<TValue> values)
{
if (null == valueSelector) { throw new ArgumentNullException("valueSelector"); }
if (null == values) { throw new ArgumentNullException("values"); }
ParameterExpression p = valueSelector.Parameters.Single();
if (!values.Any())
{
return source;
}
var equals = values.Select(value => (Expression)Expression.Equal(valueSelector.Body, Expression.Constant(value, typeof(TValue))));
var body = equals.Aggregate<Expression>((accumulate, equal) => Expression.Or(accumulate, equal));
return source.Where(Expression.Lambda<Func<TEntity, bool>>(body, p));
}
}
}
EntityFramework6写的数据访问框架之三DatabaseExtension
最新推荐文章于 2021-06-30 15:11:40 发布