diff --git a/ZeroLevel.SQL/Contracts/IDbProvider.cs b/ZeroLevel.SQL/Contracts/IDbProvider.cs index 420786c..fccba2c 100644 --- a/ZeroLevel.SQL/Contracts/IDbProvider.cs +++ b/ZeroLevel.SQL/Contracts/IDbProvider.cs @@ -21,8 +21,5 @@ namespace ZeroLevel.SqlServer void LazySelect(string query, DbParameter[] par, Func readHandler); void LazySelect(string query, DbParameter[] par, Func readHandler, int timeout); void LazySelectWithParameters(string query, IEnumerable> par, Func readHandler, int timeout); - - T Read(DbDataReader reader, int index); - T Read(DbDataReader reader, string name); } } diff --git a/ZeroLevel.SQL/DBReader.cs b/ZeroLevel.SQL/DBReader.cs new file mode 100644 index 0000000..e50cb8d --- /dev/null +++ b/ZeroLevel.SQL/DBReader.cs @@ -0,0 +1,29 @@ +using System; +using System.Data.Common; + +namespace ZeroLevel.SqlServer +{ + public static class DBReader + { + public static T Read(this DbDataReader reader, int index) + { + if (reader[index] == DBNull.Value) return default(T); + Type t; + if ((t = Nullable.GetUnderlyingType(typeof(T))) != null) + { + return (T)Convert.ChangeType(reader[index], t); + } + return (T)Convert.ChangeType(reader[index], typeof(T)); + } + public static T Read(this DbDataReader reader, string name) + { + if (reader[name] == DBNull.Value) return default(T); + Type t; + if ((t = Nullable.GetUnderlyingType(typeof(T))) != null) + { + return (T)Convert.ChangeType(reader[name], t); + } + return (T)Convert.ChangeType(reader[name], typeof(T)); + } + } +} diff --git a/ZeroLevel.SQL/SqlDbProvider.cs b/ZeroLevel.SQL/SqlDbProvider.cs index 3d4541a..11ded64 100644 --- a/ZeroLevel.SQL/SqlDbProvider.cs +++ b/ZeroLevel.SQL/SqlDbProvider.cs @@ -471,16 +471,5 @@ namespace ZeroLevel.SqlServer } } #endregion - - public T Read(DbDataReader reader, int index) - { - if (reader[index] == DBNull.Value) return default(T); - return (T)Convert.ChangeType(reader[index], typeof(T)); - } - public T Read(DbDataReader reader, string name) - { - if (reader[name] == DBNull.Value) return default(T); - return (T)Convert.ChangeType(reader[name], typeof(T)); - } } } diff --git a/ZeroLevel.SQL/ZeroLevel.SQL.csproj b/ZeroLevel.SQL/ZeroLevel.SQL.csproj index eabd712..1949889 100644 --- a/ZeroLevel.SQL/ZeroLevel.SQL.csproj +++ b/ZeroLevel.SQL/ZeroLevel.SQL.csproj @@ -2,6 +2,7 @@ netstandard2.0 + AnyCPU;x64 diff --git a/ZeroLevel/Services/Trees/Generic.cs b/ZeroLevel/Services/Trees/Generic.cs index a24f0f0..d525a3c 100644 --- a/ZeroLevel/Services/Trees/Generic.cs +++ b/ZeroLevel/Services/Trees/Generic.cs @@ -52,5 +52,25 @@ namespace ZeroLevel.Services.Trees } } } + + /// + /// traversing a tree in width from left to right + /// + public IEnumerable> Plain() + { + var queue = new Queue>(); + foreach (var r in _rootNodes) { + queue.Enqueue(r.Value); + } + while (queue.Count > 0) + { + var current = queue.Dequeue(); + yield return current; + foreach (var r in current.Nodes) + { + queue.Enqueue(r.Value); + } + } + } } } \ No newline at end of file