using System;
|
using System.Collections;
|
using System.Collections.Concurrent;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection;
|
using System.Text;
|
|
namespace DapperExtensions
|
{
|
public class DapperExtCommon
|
{
|
/// <summary>
|
/// 关键字处理[name] `name`
|
/// 获取id,sex,name
|
/// </summary>
|
/// <param name="fieldList"></param>
|
/// <param name="leftChar">左符号</param>
|
/// <param name="rightChar">右符号</param>
|
/// <returns></returns>
|
public static string GetFieldsStr(IEnumerable<string> fieldList, string leftChar, string rightChar)
|
{
|
StringBuilder sb = new StringBuilder();
|
foreach (var item in fieldList)
|
{
|
sb.AppendFormat("{0}{1}{2}", leftChar, item, rightChar);
|
|
if (item != fieldList.Last())
|
{
|
sb.Append(",");
|
}
|
}
|
|
return sb.ToString();
|
}
|
|
/// <summary>
|
/// //获取@id,@sex,@name
|
/// </summary>
|
/// <param name="fieldList"></param>
|
/// <returns></returns>
|
public static string GetFieldsAtStr(IEnumerable<string> fieldList)
|
{
|
StringBuilder sb = new StringBuilder();
|
foreach (var item in fieldList)
|
{
|
sb.AppendFormat(":{0}", item);
|
|
if (item != fieldList.Last())
|
{
|
sb.Append(",");
|
}
|
}
|
return sb.ToString();
|
}
|
|
public static IEnumerable GetMultiExec(object param)
|
{
|
return (param is IEnumerable && !(param is string || param is IEnumerable<KeyValuePair<string, object>>)) ? (IEnumerable)param : null;
|
}
|
|
/// <summary>
|
/// 判断输入参数是否有个数,用于in判断
|
/// </summary>
|
/// <param name="param"></param>
|
/// <returns></returns>
|
public static bool ObjectIsEmpty(object param)
|
{
|
bool result = true;
|
IEnumerable data = GetMultiExec(param);
|
if (data != null)
|
{
|
foreach (var item in data)
|
{
|
result = false;
|
break;
|
}
|
}
|
return result;
|
}
|
|
/// <summary>
|
/// 关键字处理[name] `name`
|
/// 获取id=@id,name=@name
|
/// </summary>
|
/// <param name="fieldList"></param>
|
/// <param name="leftChar">左符号</param>
|
/// <param name="rightChar">右符号</param>
|
/// <returns></returns>
|
public static string GetFieldsEqStr(IEnumerable<string> fieldList, string leftChar, string rightChar)
|
{
|
StringBuilder sb = new StringBuilder();
|
foreach (var item in fieldList)
|
{
|
sb.AppendFormat("{0}{1}{2}=:{1}", leftChar, item, rightChar);
|
|
if (item != fieldList.Last())
|
{
|
sb.Append(",");
|
}
|
}
|
return sb.ToString();
|
}
|
|
|
public static DapperExtSqls GetDapperExtSqls(Type t)
|
{
|
DapperExtSqls dapperextsqls = new DapperExtSqls();
|
var tableAttr = t.GetCustomAttributes(false).FirstOrDefault(f => f is TableAttribute) as TableAttribute;
|
if (tableAttr == null)
|
{
|
dapperextsqls.TableName = t.Name;
|
}
|
else
|
{
|
dapperextsqls.TableName = tableAttr.Name;
|
}
|
|
var allproperties = t.GetProperties();
|
List<PropertyInfo> exceptKeyAndComputeproperties = new List<PropertyInfo>(); //去除主键和忽略
|
List<PropertyInfo> exceptComputeproperties = new List<PropertyInfo>(); //去除忽略
|
|
foreach (var item in allproperties)
|
{
|
var attribute = item.GetCustomAttributes(false).FirstOrDefault();
|
if (attribute == null)
|
{
|
exceptKeyAndComputeproperties.Add(item);
|
exceptComputeproperties.Add(item);
|
}
|
else
|
{
|
if (attribute.GetType() != typeof(ComputedAttribute))
|
{
|
if (attribute.GetType() == typeof(KeyAttribute)) //主键列
|
{
|
dapperextsqls.HasKey = true;
|
dapperextsqls.KeyName = item.Name;
|
dapperextsqls.KeyType = item.PropertyType.Name;
|
KeyAttribute keyAttr = (KeyAttribute)attribute;
|
if (keyAttr.IsIdentity)
|
{
|
dapperextsqls.IsIdentity = true;
|
}
|
}
|
else
|
{
|
exceptKeyAndComputeproperties.Add(item);
|
}
|
|
exceptComputeproperties.Add(item);
|
}
|
}
|
}
|
|
IEnumerable<string> exceptKeyAndComputeFieldsArr = exceptKeyAndComputeproperties.Select(s => s.Name);
|
IEnumerable<string> exceptComputeFieldsArr = exceptComputeproperties.Select(s => s.Name);
|
|
dapperextsqls.ExceptKeyFieldList = exceptKeyAndComputeFieldsArr;
|
dapperextsqls.AllFieldList = exceptComputeFieldsArr;
|
|
return dapperextsqls;
|
}
|
|
private static readonly ConcurrentDictionary<RuntimeTypeHandle, DapperExtSqls> dapperExtsqlsDict = new ConcurrentDictionary<RuntimeTypeHandle, DapperExtSqls>();
|
public static DapperExtSqls GetDapperExtSqlsCache(Type t)
|
{
|
if (dapperExtsqlsDict.Keys.Contains(t.TypeHandle))
|
{
|
return dapperExtsqlsDict[t.TypeHandle];
|
}
|
else
|
{
|
DapperExtSqls dt = GetDapperExtSqls(t);
|
dapperExtsqlsDict[t.TypeHandle] = dt;
|
return dt;
|
}
|
}
|
}
|
}
|