Procházet zdrojové kódy

- add Value/Extensions/EnumerableExt.WhereEquals to use where equals with comparer provided

- add Value/Extensions/StringExt.Like to use string pattern comparer
Dalibor Votruba před 2 roky
rodič
revize
e569bc669d

+ 12 - 0
qdr.fnd.core/Value/Extensions/EnumerableExt.cs

@@ -94,5 +94,17 @@ namespace Quadarax.Foundation.Core.Value.Extensions
             }
             return result.Distinct();
         }
+       
+        public static IEnumerable<TElement> WhereEquals<TElement>(this IEnumerable<TElement> owner, TElement? value,IEqualityComparer<TElement>? comparer = null)
+        {
+            if (owner== null)
+                throw new ArgumentNullException(nameof(owner));
+
+            if (comparer == null)
+                return owner.Where(x => Equals(x, value));
+
+            return owner.Where(x => comparer.Equals(x,value));
+        }
+
     }
 }

+ 18 - 0
qdr.fnd.core/Value/Extensions/StringExt.cs

@@ -7,6 +7,11 @@ namespace Quadarax.Foundation.Core.Value.Extensions
 {
     public static class StringExt
     {
+        /// <summary>
+        /// Default string comparer for like operator.
+        /// </summary>
+        public static IEqualityComparer<string> DefaultLikeComparer { get; set; } = new StringPatternComparer();
+
         public static string Align(this string value, int size)
         {
             if (string.IsNullOrEmpty(value)) return new string(' ', size);
@@ -143,5 +148,18 @@ namespace Quadarax.Foundation.Core.Value.Extensions
                 .Where(c => !Char.IsWhiteSpace(c))
                 .ToArray());
         }
+
+        /// <summary>
+        /// Performs like operator on input string. customComparer can be provides to override default comparer.
+        /// </summary>
+        /// <param name="input">Input string to compare</param>
+        /// <param name="searchPattern">Search pattern corresponds with comparer implementation.</param>
+        /// <param name="customComparer">Custom comparer. If not set, use default comparer (defined in <see cref="DefaultLikeComparer"/>)</param>
+        /// <returns></returns>
+        public static bool Like(this string input,string searchPattern, IEqualityComparer<string>? customComparer = null)
+        {
+            customComparer ??= DefaultLikeComparer;
+            return customComparer.Equals(input, searchPattern);
+        }
     }
 }

+ 3 - 1
qdr.fnd.core/releasenotes.md

@@ -2,7 +2,7 @@
 Ordered by version descending
 
 ## 0.0.2.0
-Date:__17.10.2023__
+Date:__19.10.2023__
 - extends Thread/LoopWorker to support external ansync iteration body expression
 - fix Thread/ContiguousWorker to support external ansync iteration body expression
 - add Thread/BasicWorkerContext and extends IWorkerContext to stores CancellationToken
@@ -12,6 +12,8 @@ Date:__17.10.2023__
 - add Collections/LockedList to support thread safe listng
 - extends Thread/LoopWorker to support custom overlaping iterations
 - add Value/StringPatternComparer to equals string and simple pattern expression
+- add Value/Extensions/EnumerableExt.WhereEquals to use where equals with comparer provided
+- add Value/Extensions/StringExt.Like to use string pattern comparer
 - fix quality CA
 - minor fixes
 ---