mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-19 01:58:13 +08:00
-
This commit is contained in:
@@ -38,7 +38,7 @@ namespace OrmTest.UnitTest
|
|||||||
|
|
||||||
#region dr ot entity
|
#region dr ot entity
|
||||||
db.IgnoreComumns.Add("TestId", "Student");
|
db.IgnoreComumns.Add("TestId", "Student");
|
||||||
var dr0 = db.Queryable<Student>().Select(it => new { Student = it, Name = it.Name,w=new { id=it.Id } }).ToList();
|
var dr0 = db.Queryable<Student>().Select(it => new { id=it.Id,w=new { x=it } }).ToList();
|
||||||
var dr1 = db.Queryable<Student>().Select(it => new { newid = it.Id }).ToList();
|
var dr1 = db.Queryable<Student>().Select(it => new { newid = it.Id }).ToList();
|
||||||
var dr2 = db.Queryable<Student>().Select(it => new { newid = it.Id, obj = it }).ToList();
|
var dr2 = db.Queryable<Student>().Select(it => new { newid = it.Id, obj = it }).ToList();
|
||||||
var dr3 = db.Queryable<Student>().Select(it => new ViewModelStudent2{ Student=it }).ToList();
|
var dr3 = db.Queryable<Student>().Select(it => new ViewModelStudent2{ Student=it }).ToList();
|
||||||
|
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Dynamic;
|
using System.Dynamic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
@@ -33,54 +34,86 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
///DataReader to DataReaderToDictionary
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Dictionary<string,object> DataReaderToDictionary(IDataReader reader)
|
||||||
|
{
|
||||||
|
Dictionary<string, object> result = new Dictionary<string, object>();
|
||||||
|
for (int i = 0; i < reader.FieldCount; i++)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
result.Add(reader.GetName(i), reader.GetValue(i));
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
result.Add(reader.GetName(i), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public List<T> DataReaderToDynamicList<T>(IDataReader reader)
|
public List<T> DataReaderToDynamicList<T>(IDataReader reader)
|
||||||
{
|
{
|
||||||
var tType = typeof(T);
|
var tType = typeof(T);
|
||||||
var classProperties = tType.GetProperties().Where(it => it.PropertyType.IsClass()).ToList();
|
var classProperties = tType.GetProperties().ToList();
|
||||||
var reval = new List<T>();
|
var reval = new List<T>();
|
||||||
if (reader != null && !reader.IsClosed)
|
if (reader != null && !reader.IsClosed)
|
||||||
{
|
{
|
||||||
while (reader.Read())
|
while (reader.Read())
|
||||||
{
|
{
|
||||||
var expandoObject = DataReaderToExpandoObject(reader);
|
var readerValues = DataReaderToDictionary(reader);
|
||||||
var dic = (IDictionary<string,object>)expandoObject;
|
var result = new Dictionary<string, object>();
|
||||||
foreach (var item in classProperties)
|
foreach (var item in classProperties)
|
||||||
{
|
{
|
||||||
var startsWithName = item.Name + "_";
|
var name = item.Name;
|
||||||
List<string> removeKeys = new List<string>();
|
var typeName = tType.Name;
|
||||||
foreach (var d in dic)
|
if (item.PropertyType.IsClass())
|
||||||
{
|
{
|
||||||
if (d.Key.StartsWith(startsWithName)) {
|
result.Add(name,DataReaderToDynamicList_Part(readerValues, item, reval));
|
||||||
removeKeys.Add(d.Key);
|
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
if (removeKeys.Any()) {
|
|
||||||
var keyValues = removeKeys.Select(it => new KeyValuePair<string, object>(it.Replace(startsWithName, null), dic[it])).ToList();
|
|
||||||
foreach (var key in removeKeys)
|
|
||||||
{
|
{
|
||||||
dic.Remove(key);
|
if (readerValues.ContainsKey(name))
|
||||||
}
|
|
||||||
if (!item.PropertyType.IsAnonymousType())
|
|
||||||
{
|
{
|
||||||
var obj = Activator.CreateInstance(item.PropertyType, true);
|
result.Add(name, readerValues[name]);
|
||||||
var ps = obj.GetType().GetProperties();
|
|
||||||
foreach (var keyValue in keyValues)
|
|
||||||
{
|
|
||||||
ps.Single(it => it.Name == keyValue.Key).SetValue(obj, keyValue.Value);
|
|
||||||
}
|
|
||||||
dic.Add(item.Name, obj);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var stringValue = SerializeObject(expandoObject);
|
var stringValue = SerializeObject(result);
|
||||||
reval.Add((T)DeserializeObject<T>(stringValue));
|
reval.Add((T)DeserializeObject<T>(stringValue));
|
||||||
}
|
}
|
||||||
reader.Close();
|
reader.Close();
|
||||||
}
|
}
|
||||||
return reval;
|
return reval;
|
||||||
}
|
}
|
||||||
|
private Dictionary<string,object> DataReaderToDynamicList_Part<T>(Dictionary<string, object> readerValues,PropertyInfo item, List<T> reval)
|
||||||
|
{
|
||||||
|
Dictionary<string, object> result = new Dictionary<string, object>();
|
||||||
|
var type = item.PropertyType;
|
||||||
|
var classProperties = type.GetProperties().ToList();
|
||||||
|
foreach (var prop in classProperties)
|
||||||
|
{
|
||||||
|
var name = prop.Name;
|
||||||
|
var typeName = type.Name;
|
||||||
|
if (prop.PropertyType.IsClass())
|
||||||
|
{
|
||||||
|
result.Add(name, DataReaderToDynamicList_Part(readerValues, prop, reval));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var key = typeName + "." + name;
|
||||||
|
if (readerValues.ContainsKey(key))
|
||||||
|
{
|
||||||
|
result.Add(name, readerValues[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Serialize Object
|
/// Serialize Object
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@@ -101,7 +101,7 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var asName = memberName + "_" + property.Name;
|
var asName = "["+item.Type.Name + "." + property.Name+"]";
|
||||||
var columnName = property.Name;
|
var columnName = property.Name;
|
||||||
if (Context.IsJoin)
|
if (Context.IsJoin)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user