C#用扩展方法进行自动生成添加删除对象转换的功能
public static class ExtendedModel
{
#region 实体类的增删改查
#region 添加
public static string AddStr(this object t)
{
StringBuilder strSql = new StringBuilder();
StringBuilder strSql1 = new StringBuilder();
StringBuilder strSql2 = new StringBuilder();
FieldInfo PrimaryKeyInfo = t.GetType().GetField("PrimaryKey");
FieldInfo IdentityStrInfo = t.GetType().GetField("IdentityStr");
string IdentityStr = "";
if (IdentityStrInfo != null)
{
IdentityStr = IdentityStrInfo.GetValue(t).ToString();
}
foreach (var item in t.GetType().GetProperties())
{
if (IdentityStr != item.Name && item.PropertyType != typeof(System.Byte[]))
{
strSql1.Append(item.Name + ",");
if (item.PropertyType == typeof(string) || item.PropertyType == typeof(DateTime) || item.PropertyType == typeof(Nullable <DateTime>) || item.PropertyType == typeof(bool))
{
if (item.PropertyType == typeof(DateTime) || item.PropertyType == typeof(Nullable<DateTime>))
{
DateTime datetime = (DateTime)item.GetValue(t, null);
if (datetime>DateTime.Parse("1900-01-01"))
{
strSql2.Append("'" + datetime.ToString("yyyy-MM-dd HH:mm:ss") + "',");
}
else
{
strSql2.Append("'1900-01-01',");
} }
else
{
strSql2.Append("'" + item.GetValue(t, null) + "',");
} }
else
{
object value = item.GetValue(t, null);
if (value != null)
{
strSql2.Append(value + ",");
}
else
{
strSql2.Append("0,");
} }
}
}
strSql.Append("insert into " + t.GetType().Name + "(");
strSql.Append(strSql1.ToString().TrimEnd(','));
strSql.Append(")");
strSql.Append(" values (");
strSql.Append(strSql2.ToString().TrimEnd(','));
strSql.Append(")");
return strSql.ToString();
}
public static bool Add(this object t)
{
int istrue = DbHelperSQL.ExecuteSql(AddStr(t));
if (istrue > )
{
return true;
}
else
{
return false;
}
}
#endregion
#region 删除
public static string DeleteStr<T>(this T t, string Fields)
{
Type type = t.GetType();
string str = "delete " + type.Name;
if (!string.IsNullOrEmpty(Fields))
{
str += " where 1=1 ";
foreach (string item in Fields.Split(','))
{
PropertyInfo info = type.GetProperty(item);
str += string.Format(" and {0}='{1}'", info.Name, info.GetValue(t, null));
}
} return str;
}
public static string DeleteWhereStr<T>(this T t, string sqlWhere) where T : new()
{
Type type = t.GetType();
string str = "delete " + type.Name + " ";
if (!string.IsNullOrEmpty(sqlWhere))
{
str += sqlWhere;
} return str;
}
public static bool Delete<T>(this T t, string Fields)
{
int istrue = DbHelperSQL.ExecuteSql(DeleteStr(t, Fields));
if (istrue > )
{
return true;
}
else
{
return false;
}
}
public static bool DeleteWhere<T>(this T t, string sqlWhere) where T : new()
{
int istrue = DbHelperSQL.ExecuteSql(DeleteWhereStr(t, sqlWhere));
if (istrue > )
{
return true;
}
else
{
return false;
}
}
#endregion
#endregion #region 获取实体类
/// <summary>
/// DataRow转换实体类
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="row"></param>
/// <returns></returns>
public static T ToModel<T>(this DataRow row) where T : new()
{
T t = new T();
foreach (var item in t.GetType().GetProperties())
{
if (row.Table.Columns.IndexOf(item.Name) > -)
{
if (row[item.Name] != null && typeof(System.DBNull) != row[item.Name].GetType())
{
if (typeof(System.Byte) == row[item.Name].GetType())
{
if (item.PropertyType == typeof(System.Nullable<int>) || item.PropertyType == typeof(int))
{
item.SetValue(t,Convert.ToInt32(row[item.Name]), null);
} }
else
{
item.SetValue(t, Convert.ChangeType(row[item.Name], item.PropertyType), null); }
}
else if (typeof(System.DateTime) == item.PropertyType)
{
item.SetValue(t, DateTime.Parse("1999-12-12"), null);
} } }
return t;
}
/// <summary>
/// DataRow转换实体类
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="row"></param>
/// <returns></returns>
public static List<T> ToModelList<T>(this DataTable dt) where T : new()
{
List<T> list = new List<T>();
if (dt.Rows.Count > )
{
foreach (DataRow item in dt.Rows)
{
list.Add(ToModel<T>(item));
} }
return list;
}
/// <summary>
/// 查询Where获取实体类
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="strWhere"></param>
/// <returns></returns>
public static T Model<T>(this T t, string strWhere)
where T : class,new()
{
string str = "select top 1 * from " + typeof(T).Name + " " + strWhere;
DataTable dt = DbHelperSQL.Query(str).Tables[];
if (dt.Rows.Count > )
{
return ToModel<T>(dt.Rows[]);
}
else
{
return null;
}
}
/// <summary>
/// 查询Where获取实体列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="strWhere"></param>
/// <returns></returns>
public static List<T> ModelList<T>(this T t, string strWhere)
where T : class,new()
{
string str = "select * from " + typeof(T).Name + " " + strWhere;
DataTable dt = DbHelperSQL.Query(str).Tables[];
List<T> list = new List<T>();
if (dt.Rows.Count > )
{
foreach (DataRow item in dt.Rows)
{
list.Add(ToModel<T>(item));
} }
return list;
}
#endregion #region 实体类转换
public static T EntityToT<T, TT>(this TT tt) where T : new()
{
T t = new T();
List<PropertyInfo> listT = t.GetType().GetProperties().ToList();
List<PropertyInfo> listObj = tt.GetType().GetProperties().ToList();
foreach (var item in listT)
{
object value = SetPropertyValue(item, listObj, tt);
item.SetValue(t, value, null);
}
return t;
}
private static object SetPropertyValue(PropertyInfo info, List<PropertyInfo> listObj, object obj)
{
try
{
object obValue = null;
Type type = info.PropertyType;
List<PropertyInfo> objInfo = listObj.Where(c => c.Name.ToLower() == info.Name.ToLower()).ToList();
if (objInfo.Count > )
{
obValue = objInfo[].GetValue(obj, null);
if (type == typeof(decimal) || type == typeof(Decimal))
{ if (obValue != null)
{
obValue = decimal.Parse(obValue.ToString());
} }
else if (type == typeof(int))
{
if (obValue != null)
{
obValue = int.Parse(obValue.ToString());
}
}
else if (type == typeof(DateTime))
{
if (obValue != null)
{
DateTime date = new DateTime();
if (DateTime.TryParse(obValue.ToString(), out date))
{
obValue = date;
}
else
{
obValue = DateTime.Parse("1999-12-12");
} }
else
{
obValue = DateTime.Parse("1999-12-12");
}
}
}
return obValue;
}
catch (Exception ex)
{
throw new Exception(string.Format("实体转换失败")); ;
} }
#endregion }
调用方法
//datarow转换对象
VWB_Weight upModel = dt.Rows[].ToModel<VWB_Weight>();
//table转换list
List<VWB_Weight> upModel = dt.ToModelList<VWB_Weight>(); upModel.Add();
//一个对象转换另一个对象
AA a = upModel.EntityToT<AA>;
动软生成器模板
<#@ template language="c#" HostSpecific="True" #>
<#@ output extension= ".cs" #>
<#
TableHost host = (TableHost)(Host);
host.Fieldlist.Sort(CodeCommon.CompareByintOrder);
#>
using System;
using System.Text;
using System.Collections.Generic;
using System.Data;
namespace <#= host.NameSpace #>.Model<# if( host.Folder.Length > ) {#>.<#= host.Folder #><# } #>
{
<# if( host.TableDescription.Length > ) {#>
//<#= host.TableDescription #>
<# } #>
public class <#= host.GetModelClass(host.TableName) #>
{ <# foreach (ColumnInfo c in host.Fieldlist)
{ #>/// <summary>
/// <#= string.IsNullOrEmpty(c.Description) ? c.ColumnName : c.Description #>
/// </summary>
private <#= CodeCommon.DbTypeToCS(c.TypeName) #> _<#= c.ColumnName.ToString().ToLower() #>;
public <#= CodeCommon.DbTypeToCS(c.TypeName) #> <#= c.ColumnName #>
{
get{ return _<#= c.ColumnName.ToString().ToLower()#>; }
set{ _<#= c.ColumnName.ToString().ToLower() #> = value; }
}
<# } #>
public string PrimaryKey="<# foreach (ColumnInfo c in host.Keys)
{ #><#= c.ColumnName #>,<#}#>".TrimEnd(',');
public string IdentityStr = "<# for(int i=0;i< host.Fieldlist.Count;i++) { ColumnInfo c = host.Fieldlist[i]; if (c.IsIdentity) {#><#= c.ColumnName#><# if (i< host.Fieldlist.Count-1 ) {#>,<#}#><#}}#>".TrimEnd(','); public string IdentityKey="<#= host.IdentityKey==null?"":host.IdentityKey.ColumnName#>"; }
}
像删除和修改的一些代码没有顾得上去添加
C#用扩展方法进行自动生成添加删除对象转换的功能的更多相关文章
- C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数
一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...
- Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展
Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffoldi ...
- IDEA类和方法注释自动生成
一.生成类注释 1.打开Preferences-->Editor-->File and Code Templates,右侧选择Filestab页,找到Class.Interface,可以看 ...
- docfx 简单使用方法、自动生成目录的工具
[摘要] 这是我编写的一个 Docfx 文档自动生成工具,只要写好 Markdown 文档,使用此工具可为目录.文件快速生成配置,然后直接使用 docfx 运行即可. https://github.c ...
- MyBatis Generator 自动生成的POJO对象的使用(二)
四.Example Class使用说明 示例类指定如何构建动态where子句. 表中的每个非BLOB列都可以选择包含在where子句中. 示例是演示此类用法的最佳方法. 示例类可用于生成几乎无限制的w ...
- MyBatis Generator 自动生成的POJO对象的使用(一)
MyBatis Generator 会自动生成以下几种类型的对象(除非你使用MyBatis3DynamicSql 的运行环境): Java Model Objects(总是生成) SQL Map Fi ...
- Eclipse自动生成作者、日期注释等功能设置
我们在使用Eclipse 编写Java代码时,自动生成的注释信息都是按照预先设置好的格式生成的. 修改作者.日期注释格式:打开Windows->Preferences->Java-> ...
- Eclipse自动补全功能和自动生成作者、日期注释等功能设置
修改作者.日期注释格式:打开Windows->Preferences->Java->Code Style->Code Templates,点击右边窗口中的Comments,可以 ...
- Eclipse自动生成作者、日期注释等功能设置(转载)
在使用Eclipse 编写Java代码时,自动生成的注释信息都是按照预先设置好的格式生成的. 修改作者.日期注释格式:打开Windows->Preferences->Java->Co ...
随机推荐
- 良心版Dolby Home Theater v4.1安装教程
感(pi)谢(pan)一下两个教程: 文库文章链接:http://wenku.baidu.com/link?url=beBg_apvCuY3xiCXk4zl65Q7AmeCjoDGMol03K0xhk ...
- Datazen地图Chart介绍
本篇主要介绍Datazen对于地图图表的支持,这里你可以看到Datazen目前所支持的地图图表类型,以及其自带的地图数据. Datazen下地图图表跟其它Dashboard的类型是一样的. 创建一个新 ...
- HEAP CORRUPTION DETECTED :after Normal block 错误
http://blog.csdn.net/zhccl/article/details/7889590
- WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)
对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...
- Java 之 集合框架(JCF)
1.集合框架 a.框架:为了实现某一目的或功能,而预先提供的一系列封装好的.具有继承或实现关系的类与集合 b.集合:①定义:Java中对一些数据结构和算法进行封装,即封装(集合也是一种对象) ②特点: ...
- MIT 6.828 JOS学习笔记15. Lab 2.1
Lab 2: Memory Management lab2中多出来的几个文件: inc/memlayout.h kern/pmap.c kern/pmap.h kern/kclock.h kern/k ...
- AndroidAnnotations(Code Diet)android快速开发框架
最近用了一款很不错的android快速开发框架,1000行的代码瞬间变成几百行,不用你会后悔的 特点: (1) 依赖注入:包括view,extras,系统服务,资源等等(2) 简单的线程模型,通过an ...
- C#开发中常用方法1------日期计算
/// <summary>/// 获取指定日期,在为一年中为第几周/// </summary>/// <param name="dt">指定时间 ...
- Codeforces Round #388 (Div. 2) - C
题目链接:http://codeforces.com/contest/749/problem/C 题意:给定一个长度为n的D/R序列,代表每个人的派别,然后进行发表意见,顺序是从1到n.每个人到他的回 ...
- 【算法杂谈】Miller-Rabin素性测试算法
额,我们今天来讲一讲Miller-Rabin素性测试算法. 读者:怎么又是随机算法!!!(⊙o⊙)… [好了,言归正传] [费马小定理] 费马小定理只是个必要条件,符合费马小定理而非素数的数叫做Car ...