|
|
@@ -48,11 +48,6 @@ namespace Masuit.Tools.Linq
|
|
|
return Expression.Lambda<Func<T, bool>>(body, left.Parameters[0]);
|
|
|
}
|
|
|
|
|
|
- private static bool IsExpressionBodyConstant<T>(Expression<Func<T, bool>> left)
|
|
|
- {
|
|
|
- return left.Body.NodeType == ExpressionType.Constant;
|
|
|
- }
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 取最大值
|
|
|
/// </summary>
|
|
|
@@ -63,6 +58,17 @@ namespace Masuit.Tools.Linq
|
|
|
/// <returns></returns>
|
|
|
public static TResult MaxOrDefault<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector) => source.Select(selector).OrderByDescending(_ => _).FirstOrDefault();
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 取最大值
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TSource"></typeparam>
|
|
|
+ /// <typeparam name="TResult"></typeparam>
|
|
|
+ /// <param name="source"></param>
|
|
|
+ /// <param name="selector"></param>
|
|
|
+ /// <param name="defaultValue"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static TResult MaxOrDefault<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector, TResult defaultValue) => source.Select(selector).OrderByDescending(_ => _).FirstOrDefault() ?? defaultValue;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 取最大值
|
|
|
/// </summary>
|
|
|
@@ -71,6 +77,15 @@ namespace Masuit.Tools.Linq
|
|
|
/// <returns></returns>
|
|
|
public static TSource MaxOrDefault<TSource>(this IQueryable<TSource> source) => source.OrderByDescending(_ => _).FirstOrDefault();
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 取最大值
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TSource"></typeparam>
|
|
|
+ /// <param name="source"></param>
|
|
|
+ /// <param name="defaultValue"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static TSource MaxOrDefault<TSource>(this IQueryable<TSource> source, TSource defaultValue) => source.OrderByDescending(_ => _).FirstOrDefault() ?? defaultValue;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 取最大值
|
|
|
/// </summary>
|
|
|
@@ -78,8 +93,9 @@ namespace Masuit.Tools.Linq
|
|
|
/// <typeparam name="TResult"></typeparam>
|
|
|
/// <param name="source"></param>
|
|
|
/// <param name="selector"></param>
|
|
|
+ /// <param name="defaultValue"></param>
|
|
|
/// <returns></returns>
|
|
|
- public static TResult MaxOrDefault<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector) => source.Select(selector).OrderByDescending(_ => _).FirstOrDefault();
|
|
|
+ public static TResult MaxOrDefault<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector, TResult defaultValue) => source.Select(selector).OrderByDescending(_ => _).FirstOrDefault() ?? defaultValue;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 取最大值
|
|
|
@@ -89,6 +105,15 @@ namespace Masuit.Tools.Linq
|
|
|
/// <returns></returns>
|
|
|
public static TSource MaxOrDefault<TSource>(this IEnumerable<TSource> source) => source.OrderByDescending(_ => _).FirstOrDefault();
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 取最大值
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TSource"></typeparam>
|
|
|
+ /// <param name="source"></param>
|
|
|
+ /// <param name="defaultValue"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static TSource MaxOrDefault<TSource>(this IEnumerable<TSource> source, TSource defaultValue) => source.OrderByDescending(_ => _).FirstOrDefault() ?? defaultValue;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 取最小值
|
|
|
/// </summary>
|
|
|
@@ -99,6 +124,17 @@ namespace Masuit.Tools.Linq
|
|
|
/// <returns></returns>
|
|
|
public static TResult MinOrDefault<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector) => source.Select(selector).OrderBy(_ => _).FirstOrDefault();
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 取最小值
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TSource"></typeparam>
|
|
|
+ /// <typeparam name="TResult"></typeparam>
|
|
|
+ /// <param name="source"></param>
|
|
|
+ /// <param name="selector"></param>
|
|
|
+ /// <param name="defaultValue"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static TResult MinOrDefault<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector, TResult defaultValue) => source.Select(selector).OrderBy(_ => _).FirstOrDefault() ?? defaultValue;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 取最小值
|
|
|
/// </summary>
|
|
|
@@ -107,6 +143,15 @@ namespace Masuit.Tools.Linq
|
|
|
/// <returns></returns>
|
|
|
public static TSource MinOrDefault<TSource>(this IQueryable<TSource> source) => source.OrderBy(_ => _).FirstOrDefault();
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 取最小值
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TSource"></typeparam>
|
|
|
+ /// <param name="source"></param>
|
|
|
+ /// <param name="defaultValue"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static TSource MinOrDefault<TSource>(this IQueryable<TSource> source, TSource defaultValue) => source.OrderBy(_ => _).FirstOrDefault() ?? defaultValue;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 取最小值
|
|
|
/// </summary>
|
|
|
@@ -117,6 +162,17 @@ namespace Masuit.Tools.Linq
|
|
|
/// <returns></returns>
|
|
|
public static TResult MinOrDefault<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector) => source.Select(selector).OrderBy(_ => _).FirstOrDefault();
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 取最小值
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TSource"></typeparam>
|
|
|
+ /// <typeparam name="TResult"></typeparam>
|
|
|
+ /// <param name="source"></param>
|
|
|
+ /// <param name="selector"></param>
|
|
|
+ /// <param name="defaultValue"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static TResult MinOrDefault<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector, TResult defaultValue) => source.Select(selector).OrderBy(_ => _).FirstOrDefault() ?? defaultValue;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 取最小值
|
|
|
/// </summary>
|
|
|
@@ -124,6 +180,15 @@ namespace Masuit.Tools.Linq
|
|
|
/// <param name="source"></param>
|
|
|
/// <returns></returns>
|
|
|
public static TSource MinOrDefault<TSource>(this IEnumerable<TSource> source) => source.OrderBy(_ => _).FirstOrDefault();
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 取最小值
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TSource"></typeparam>
|
|
|
+ /// <param name="source"></param>
|
|
|
+ /// <param name="defaultValue"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static TSource MinOrDefault<TSource>(this IEnumerable<TSource> source, TSource defaultValue) => source.OrderBy(_ => _).FirstOrDefault() ?? defaultValue;
|
|
|
}
|
|
|
|
|
|
internal class SubstituteParameterVisitor : ExpressionVisitor
|
|
|
@@ -135,4 +200,4 @@ namespace Masuit.Tools.Linq
|
|
|
return Sub.TryGetValue(node, out var newValue) ? newValue : node;
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
+}
|