From fb48a5426ea59decc51b845d179dedb57b4eed4a Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 9 Apr 2017 17:03:07 +0800 Subject: [PATCH] - --- OrmTest/Models/ViewModelStudent.cs | 1 + OrmTest/UnitTest/Query/SelectQuery.cs | 9 +++--- SqlSugar/Common/RewritableMethods.cs | 43 ++++++++++++++++++++++----- 3 files changed, 42 insertions(+), 11 deletions(-) diff --git a/OrmTest/Models/ViewModelStudent.cs b/OrmTest/Models/ViewModelStudent.cs index 49498afc6..6705f3dcb 100644 --- a/OrmTest/Models/ViewModelStudent.cs +++ b/OrmTest/Models/ViewModelStudent.cs @@ -12,6 +12,7 @@ namespace OrmTest.Models } public class ViewModelStudent2 { + public string Name { get; set; } public Student Student { get; set; } } } diff --git a/OrmTest/UnitTest/Query/SelectQuery.cs b/OrmTest/UnitTest/Query/SelectQuery.cs index d5ccbf3d5..8a1d33855 100644 --- a/OrmTest/UnitTest/Query/SelectQuery.cs +++ b/OrmTest/UnitTest/Query/SelectQuery.cs @@ -29,7 +29,7 @@ namespace OrmTest.UnitTest { using (var db = GetInstance()) { - db.Database.IsEnableLogEvent = true; + //db.Database.IsEnableLogEvent = true; db.Database.LogEventStarting = (sql, pars) => { Console.WriteLine(sql + " " + pars); @@ -38,9 +38,10 @@ namespace OrmTest.UnitTest #region dr ot entity db.IgnoreComumns.Add("TestId", "Student"); - var dr2 = db.Queryable().Select(it => new { newid = it.Id, obj = it }).ToList(); var dr1 = db.Queryable().Select(it => new { newid = it.Id }).ToList(); - var x=db.RewritableMethods.SerializeObject(new { newid = 1, obj = new School() { Id = 1 } }); + var dr2 = db.Queryable().Select(it => new { newid = it.Id, obj = it }).ToList(); + var dr3 = db.Queryable().Select(it => new ViewModelStudent2{ Student=it }).ToList(); + var dr4 = db.Queryable().Select(it => new ViewModelStudent2 { Student = it, Name =it.Name }).ToList(); #endregion @@ -80,7 +81,7 @@ namespace OrmTest.UnitTest .Select("st.*").ToList(); #endregion - + } } diff --git a/SqlSugar/Common/RewritableMethods.cs b/SqlSugar/Common/RewritableMethods.cs index a82102890..e7e72eb98 100644 --- a/SqlSugar/Common/RewritableMethods.cs +++ b/SqlSugar/Common/RewritableMethods.cs @@ -18,35 +18,64 @@ namespace SqlSugar /// public ExpandoObject DataReaderToExpandoObject(IDataReader reader) { - ExpandoObject d = new ExpandoObject(); + ExpandoObject result = new ExpandoObject(); + var dic = ((IDictionary)result); for (int i = 0; i < reader.FieldCount; i++) { try { - ((IDictionary)d).Add(reader.GetName(i), reader.GetValue(i)); + dic.Add(reader.GetName(i), reader.GetValue(i)); } catch { - ((IDictionary)d).Add(reader.GetName(i), null); + dic.Add(reader.GetName(i), null); } } - return d; + return result; } public List DataReaderToDynamicList(IDataReader reader) { - var list = new List(); + var tType = typeof(T); + var classProperties = tType.GetProperties().Where(it => it.PropertyType.IsClass()).ToList(); + var reval = new List(); if (reader != null && !reader.IsClosed) { while (reader.Read()) { var expandoObject = DataReaderToExpandoObject(reader); + var dic = (IDictionary)expandoObject; + foreach (var item in classProperties) + { + var startsWithName = item.Name + "_"; + List removeKeys = new List(); + foreach (var d in dic) + { + if (d.Key.StartsWith(startsWithName)) { + removeKeys.Add(d.Key); + } + } + if (removeKeys.Any()) { + var keyValues = removeKeys.Select(it => new KeyValuePair(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); - list.Add((T)DeserializeObject(stringValue)); + reval.Add((T)DeserializeObject(stringValue)); } reader.Close(); } - return list; + return reval; } ///