using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace ApiTools.Core
{
public static class CollectionUtils
{
///
/// 去重添加
///
/// 泛型对象
/// 集合
/// 需添加的项
/// 比较
/// 集合
public static List DistinctAdd(this List list, T item, IEqualityComparer comparer = null)
{
if (list == null) return new List { item };
if (!list.Contains(item, comparer)) list.Add(item);
return list;
}
public static List DistinctSelect(this IEnumerable list, Func selector)
{
return list.Select(selector).Distinct().ToList();
}
public static List DistinctSelect(this IEnumerable list, Func predicate, Func selector)
{
return list.Where(predicate).Select(selector).Distinct().ToList();
}
public static string SplitJoin(this IEnumerable list, string split)
{
list = list.DistinctSelect(it => it.IsNotNull(), it => it);
return string.Join(split, list);
}
public static string SplitJoin(this IEnumerable list, Func selector, string split)
{
return list.Select(selector).SplitJoin(split);
}
public static string SplitJoin(this IEnumerable list, Func predicate, Func selector, string split)
{
return list.Where(predicate).Select(selector).SplitJoin(split);
}
public static bool IsNull(this T[] list)
{
return list == null || list.Length == 0;
}
public static bool IsNotNull(this T[] list)
{
return !list.IsNull();
}
public static bool IsNull(this List list)
{
return list == null || list.Count == 0;
}
public static bool IsNotNull(this List list)
{
return !list.IsNull();
}
public static IQueryable GetQueryable(this IRepository rep, bool noTracking = true)
where TEntity : class, IPrivateEntity, new()
where TDbContextLocator : class, IDbContextLocator
{
var q = rep.AsQueryable();
if (noTracking)
{
q = q.AsNoTracking();
}
return q;
}
public static IQueryable GetQueryable(this IRepository rep, bool noTracking = true)
where TEntity : class, IPrivateEntity, new()
{
var q = rep.AsQueryable();
if (noTracking)
{
q = q.AsNoTracking();
}
return q;
}
}
}