This commit is contained in:
sunkaixuan 2017-04-09 17:03:07 +08:00
parent 40f93b2109
commit fb48a5426e
3 changed files with 42 additions and 11 deletions

View File

@ -12,6 +12,7 @@ namespace OrmTest.Models
} }
public class ViewModelStudent2 public class ViewModelStudent2
{ {
public string Name { get; set; }
public Student Student { get; set; } public Student Student { get; set; }
} }
} }

View File

@ -29,7 +29,7 @@ namespace OrmTest.UnitTest
{ {
using (var db = GetInstance()) using (var db = GetInstance())
{ {
db.Database.IsEnableLogEvent = true; //db.Database.IsEnableLogEvent = true;
db.Database.LogEventStarting = (sql, pars) => db.Database.LogEventStarting = (sql, pars) =>
{ {
Console.WriteLine(sql + " " + pars); Console.WriteLine(sql + " " + pars);
@ -38,9 +38,10 @@ namespace OrmTest.UnitTest
#region dr ot entity #region dr ot entity
db.IgnoreComumns.Add("TestId", "Student"); db.IgnoreComumns.Add("TestId", "Student");
var dr2 = db.Queryable<Student>().Select(it => new { newid = it.Id, obj = 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 x=db.RewritableMethods.SerializeObject(new { newid = 1, obj = new School() { Id = 1 } }); 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 dr4 = db.Queryable<Student>().Select(it => new ViewModelStudent2 { Student = it, Name =it.Name }).ToList();
#endregion #endregion

View File

@ -18,35 +18,64 @@ namespace SqlSugar
/// <returns></returns> /// <returns></returns>
public ExpandoObject DataReaderToExpandoObject(IDataReader reader) public ExpandoObject DataReaderToExpandoObject(IDataReader reader)
{ {
ExpandoObject d = new ExpandoObject(); ExpandoObject result = new ExpandoObject();
var dic = ((IDictionary<string, object>)result);
for (int i = 0; i < reader.FieldCount; i++) for (int i = 0; i < reader.FieldCount; i++)
{ {
try try
{ {
((IDictionary<string, object>)d).Add(reader.GetName(i), reader.GetValue(i)); dic.Add(reader.GetName(i), reader.GetValue(i));
} }
catch catch
{ {
((IDictionary<string, object>)d).Add(reader.GetName(i), null); dic.Add(reader.GetName(i), null);
} }
} }
return d; return result;
} }
public List<T> DataReaderToDynamicList<T>(IDataReader reader) public List<T> DataReaderToDynamicList<T>(IDataReader reader)
{ {
var list = new List<T>(); var tType = typeof(T);
var classProperties = tType.GetProperties().Where(it => it.PropertyType.IsClass()).ToList();
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 expandoObject = DataReaderToExpandoObject(reader);
var dic = (IDictionary<string,object>)expandoObject;
foreach (var item in classProperties)
{
var startsWithName = item.Name + "_";
List<string> removeKeys = new List<string>();
foreach (var d in dic)
{
if (d.Key.StartsWith(startsWithName)) {
removeKeys.Add(d.Key);
}
}
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);
}
var obj = Activator.CreateInstance(item.PropertyType, true);
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(expandoObject);
list.Add((T)DeserializeObject<T>(stringValue)); reval.Add((T)DeserializeObject<T>(stringValue));
} }
reader.Close(); reader.Close();
} }
return list; return reval;
} }
/// <summary> /// <summary>