71 lines
2.7 KiB
C#
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;
|
|
}
|
|
|
|
}
|
|
}
|