using System; using System.Linq; using System.Linq.Expressions; namespace gehGassi.Core.Services { public static class Extensions { /// /// Linq Erweiterung für Suche in einer Liste. Es muss mind. ein Element gefunden werden /// /// /// /// /// /// public static IQueryable WhereAny(this IQueryable source, params Expression>[] predicates) { if (source == null) throw new ArgumentNullException("source"); if (predicates == null) throw new ArgumentNullException("predicates"); if (predicates.Length == 0) return source.Where(x => false); // no matches! if (predicates.Length == 1) return source.Where(predicates[0]); // simple var param = Expression.Parameter(typeof(T), "x"); Expression body = Expression.Invoke(predicates[0], param); for (int i = 1; i < predicates.Length; i++) { body = Expression.OrElse(body, Expression.Invoke(predicates[i], param)); } var lambda = Expression.Lambda>(body, param); return source.Where(lambda); } /// /// Konvertiert ein Objekt in einen Byte-Array mit Hilfe von JsonSerializer /// /// Objekt das in einen byte-Array konvertiert werden soll /// bytearrray oder null, wenn nicht möglich public static byte[] ToByteArray(this object obj) { if (obj == null) { return null; } var jsonString = System.Text.Json.JsonSerializer.Serialize(obj); var byteArray = System.Text.Encoding.UTF8.GetBytes(jsonString); return byteArray; } /// /// Konvertiert einen Byte-Array in ein Objekt mit Hilfe von JsonSerializer /// /// Typ /// Array der in Objekt konvertiert werden soll /// Objekt oder null, wenn nicht möglich public static T FromByteArray(this byte[] byteArray) where T : class { if (byteArray == null) { return default(T); } var obj = System.Text.Json.JsonSerializer.Deserialize(byteArray); return obj; } } }