EntityFramework6写的数据访问框架之三DatabaseExtension

来源:互联网 发布:正元恒邦数据是假的吗 编辑:程序博客网 时间:2024/05/19 22:06
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));        }    }}

0 0
原创粉丝点击