Browse Source

对比两个集合哪些是新增的、删除的、修改的

懒得勤快 4 years ago
parent
commit
466f9bc98b

+ 13 - 0
Masuit.Tools.Abstractions/Extensions/BaseType/IEnumerableExtensions.cs

@@ -580,5 +580,18 @@ namespace Masuit.Tools
         {
             return (news.Where(c => olds.All(m => key1Selector(m) != key2Selector(c))), olds.Where(m => news.All(c => key2Selector(c) != key1Selector(m))), olds.Where(m => news.Any(c => key1Selector(m) == key2Selector(c))));
         }
+
+        /// <summary>
+        /// 对比两个集合哪些是新增的、删除的、修改的
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="olds"></param>
+        /// <param name="news"></param>
+        /// <param name="keySelector">对比因素属性</param>
+        /// <returns></returns>
+        public static (IEnumerable<T> adds, IEnumerable<T> remove, IEnumerable<T> updates) CompareChanges<T>(this IEnumerable<T> olds, IEnumerable<T> news, Func<T, dynamic> keySelector)
+        {
+            return (news.Where(c => olds.All(m => keySelector(m) != keySelector(c))), olds.Where(m => news.All(c => keySelector(c) != keySelector(m))), olds.Where(m => news.Any(c => keySelector(m) == keySelector(c))));
+        }
     }
 }

+ 1 - 1
Masuit.Tools.Abstractions/Extensions/BaseType/StringExtensions.cs

@@ -229,7 +229,7 @@ namespace Masuit.Tools
                 return (false, null);
             }
 
-            var match = Regex.Match(s, @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
+            var match = Regex.Match(s, @"[^@ \t\r\n]+@[^@ \t\r\n]+\.[^@ \t\r\n]+");
             var isMatch = match.Success;
             if (isMatch && valid)
             {