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;
}
}