71 lines
2.7 KiB
C#

using System;
using System.Linq;
using System.Linq.Expressions;
namespace gehGassi.Core.Services
{
public static class Extensions
{
/// <summary>
/// Linq Erweiterung für Suche in einer Liste. Es muss mind. ein Element gefunden werden
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="predicates"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
public static IQueryable<T> WhereAny<T>(this IQueryable<T> source, params Expression<Func<T, bool>>[] 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<Func<T, bool>>(body, param);
return source.Where(lambda);
}
/// <summary>
/// Konvertiert ein Objekt in einen Byte-Array mit Hilfe von JsonSerializer
/// </summary>
/// <param name="obj">Objekt das in einen byte-Array konvertiert werden soll</param>
/// <returns>bytearrray oder null, wenn nicht möglich</returns>
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;
}
/// <summary>
/// Konvertiert einen Byte-Array in ein Objekt mit Hilfe von JsonSerializer
/// </summary>
/// <typeparam name="T">Typ</typeparam>
/// <param name="byteArray">Array der in Objekt konvertiert werden soll</param>
/// <returns>Objekt oder null, wenn nicht möglich</returns>
public static T FromByteArray<T>(this byte[] byteArray) where T : class
{
if (byteArray == null)
{
return default(T);
}
var obj = System.Text.Json.JsonSerializer.Deserialize<T>(byteArray);
return obj;
}
}
}