public IEnumerable <Tuple <T, K> > ExecuteReader <K>(IBatch batch, List <ColumnRelevanceMapper> mapper) where K : IEntity, new() { List <Tuple <T, K> > entitybuffer = new List <Tuple <T, K> >(128); using (var Connection = Create.CreateConnection()) { var reader = Connection.ExecuteReader(batch.SqlBuilder, batch.DynamicParameters, commandTimeout: 3600); while (reader.Read()) { T t = new T(); Type t1 = typeof(T); K k = new K(); Type k1 = typeof(K); for (Int32 i = 0; i < reader.FieldCount; i++) { Object obj = reader.GetValue(i); if (obj != null) { ColumnRelevanceMapper column = mapper[i]; if (column.TableName == t1) { PropertyValueExpression <T> .SetValue(t, column.ColumnName, obj); } else { PropertyValueExpression <K> .SetValue(k, column.ColumnName, obj); } } } Tuple <T, K> tuple = new Tuple <T, K>(t, k); entitybuffer.Add(tuple); } } return(entitybuffer); }
/// <summary> /// 根据主键查询数据 /// </summary> /// <param name="pkValue"></param> /// <returns></returns> public T Get(Object pkValue) { Type t = typeof(T); String name = EntityTableMapper.GetPkColumn(t); Expression <Func <T, Boolean> > expression = PropertyValueExpression <T> .BuildExpression(name, pkValue); return(_executeBatch.Query(_query.Select().Where(expression).End())); }