public static string QueryByEntity<T>(T t) where T : new()
{
string resultstr = string.Empty;
MySqlDataReader reader = null;
try
{
Type type = typeof(T);
PropertyInfo[] properties = type.GetProperties();
string select = string.Format("Select * from {0} {1}", type.Name, "{0}");
string where = string.Empty;
foreach (PropertyInfo property in properties)
{
var value = t.GetPropertyValue<T>(property);
if (value != null && !value.Equals(property.GetDefaultValue()))
{
if (string.IsNullOrEmpty(where))
{
where = string.Format(" where {0}='{1}' ", property.Name, value);
}
else
{
where = string.Format(" {0} and {1} = '{2}' ", where, property.Name, value);
}
}
}
select = string.Format(select, where);
MySqlConnection connection = OpenConnection();
if (connection == null)
return resultstr;
MySqlCommand _sqlCom = new MySqlCommand(select, connection);
reader = _sqlCom.ExecuteReader();
List<T> tList = new List<T>();
while (reader.Read())
{
T t1 = new T();
foreach (PropertyInfo property in properties)
{
if (!string.IsNullOrEmpty(reader[property.Name].ToString()))
{
property.SetMethod.Invoke(t1, new object[] { reader[property.Name] });
}
}
tList.Add(t1);
}
resultstr = JsonConvert.SerializeObject(tList);
}
catch (Exception ex)
{
Logging.Error(string.Format("查询数据库失败,{0}", ex.Message));
}
finally
{
if (reader != null)
{
reader.Close();
reader.Dispose();
}
}
return resultstr;
}
internal static class ObjectExtend
{
public static object GetPropertyValue<T>(this object obj, PropertyInfo property)
{
Type type = typeof(T);
PropertyInfo propertyInfo = type.GetProperty(property.Name);
if (propertyInfo != null)
{
return propertyInfo.GetMethod.Invoke(obj, null);
}
return null;
}
public static object GetDefaultValue(this PropertyInfo property)
{
return property.PropertyType.IsValueType ? Activator.CreateInstance(property.PropertyType) : null;
}
}