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;
}
}
}