ExpreessTree替代反射缓存(1)

This commit is contained in:
28810
2019-01-17 19:34:25 +08:00
parent ed239835c6
commit 863a9ee397
8 changed files with 567 additions and 104 deletions

View File

@ -66,13 +66,15 @@ namespace FreeSql.Internal.CommonProvider {
public List<T> Query<T>(CommandType cmdType, string cmdText, params DbParameter[] cmdParms) {
var names = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
var ret = new List<T>();
var type = typeof(T);
var defaultValue = default(T);
ExecuteReader(dr => {
if (names.Any() == false)
for (var a = 0; a < dr.FieldCount; a++) names.Add(dr.GetName(a), a);
object[] values = new object[dr.FieldCount];
object[] values = new object[names.Count];
dr.GetValues(values);
var read = Utils.ExecuteArrayRowReadClassOrTuple(typeof(T), names, values, 0);
ret.Add(read.value == null ? default(T) : (T)read.value);
var read = Utils.ExecuteArrayRowReadClassOrTuple(type, names, values, 0);
ret.Add(read.Value == null ? defaultValue : (T)read.Value);
}, cmdType, cmdText, cmdParms);
return ret;
}

View File

@ -23,7 +23,7 @@ namespace FreeSql.Internal.CommonProvider {
var ret = new List<T>();
foreach (var row in ds) {
var read = Utils.ExecuteArrayRowReadClassOrTuple(typeof(T), names, row);
ret.Add(read.value == null ? default(T) : (T) read.value);
ret.Add(read.Value == null ? default(T) : (T) read.Value);
}
return ret;
}