Skip to content

Commit

Permalink
支持多字段同查询条件
Browse files Browse the repository at this point in the history
  • Loading branch information
yihango committed Jul 6, 2021
1 parent c60b0ca commit 0f4cf68
Showing 1 changed file with 46 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,14 @@ namespace System.Linq
/// </summary>
public static class LinqDynamicCoreExtensions
{
static char[] SplitChar { get; set; }
const char FieldSplitChar = ',';
static char[] FieldSplitChars { get; set; }
static char[] ArraySplitChar { get; set; }

static LinqDynamicCoreExtensions()
{
SplitChar = new char[] { '|' };
FieldSplitChars = new char[] { FieldSplitChar };
ArraySplitChar = new char[] { '|' };
}


Expand All @@ -29,8 +32,8 @@ static LinqDynamicCoreExtensions()
/// <returns>返回增加了筛选条件的查询器</returns>
public static IQueryable<T> Where<T>(this IQueryable<T> query, IEnumerable<QueryCondition> queryConditions)
{
if (query == null
|| queryConditions == null
if (query == null
|| queryConditions == null
|| queryConditions.Count() == 0)
{
return query;
Expand All @@ -45,6 +48,13 @@ public static IQueryable<T> Where<T>(this IQueryable<T> query, IEnumerable<Query

foreach (var condition in conditions)
{
// 多字段列
if (condition.Field.Contains(FieldSplitChar))
{
query = query.Where(condition.AsEnumerable());
continue;
}

// 值等于空或空字符串
if (string.IsNullOrWhiteSpace(condition.Value))
{
Expand Down Expand Up @@ -112,7 +122,7 @@ public static IQueryable<T> Where<T>(this IQueryable<T> query, IEnumerable<Query
case QueryOperator.Between:
{
var values = condition.Value?.Split(
SplitChar,
ArraySplitChar,
StringSplitOptions.RemoveEmptyEntries
);
if (values == null || values.Length != 2)
Expand All @@ -132,7 +142,7 @@ public static IQueryable<T> Where<T>(this IQueryable<T> query, IEnumerable<Query
case QueryOperator.BetweenEqualStart:
{
var values = condition.Value?.Split(
SplitChar,
ArraySplitChar,
StringSplitOptions.RemoveEmptyEntries
);
if (values == null || values.Length != 2)
Expand All @@ -151,7 +161,7 @@ public static IQueryable<T> Where<T>(this IQueryable<T> query, IEnumerable<Query
case QueryOperator.BetweenEqualEnd:
{
var values = condition.Value?.Split(
SplitChar,
ArraySplitChar,
StringSplitOptions.RemoveEmptyEntries
);
if (values == null || values.Length != 2)
Expand All @@ -170,7 +180,7 @@ public static IQueryable<T> Where<T>(this IQueryable<T> query, IEnumerable<Query
case QueryOperator.BetweenEqualStartAndEnd:
{
var values = condition.Value?.Split(
SplitChar,
ArraySplitChar,
StringSplitOptions.RemoveEmptyEntries
);
if (values == null || values.Length != 2)
Expand Down Expand Up @@ -216,7 +226,7 @@ public static IQueryable<T> WhereIn<T>(this IQueryable<T> query, QueryCondition
}

var values = condition.Value.Split(
SplitChar,
ArraySplitChar,
StringSplitOptions.RemoveEmptyEntries
);
if (values == null || values.Length == 0)
Expand Down Expand Up @@ -258,7 +268,7 @@ public static IQueryable<T> WhereNotIn<T>(this IQueryable<T> query, QueryConditi
}

var values = condition.Value.Split(
SplitChar,
ArraySplitChar,
StringSplitOptions.RemoveEmptyEntries
);
if (values == null || values.Length == 0)
Expand All @@ -281,6 +291,32 @@ public static IQueryable<T> WhereNotIn<T>(this IQueryable<T> query, QueryConditi
return query.Where(inFilter.ToString(), values);
}

/// <summary>
/// 多字段表达式转表达式迭代器
/// </summary>
/// <param name="condition"></param>
/// <returns></returns>
public static IEnumerable<QueryCondition> AsEnumerable(this QueryCondition condition)
{
var fields = condition.Field
.Split(FieldSplitChars, StringSplitOptions.RemoveEmptyEntries)
.Select(o => o.Trim())
.Where(o => !string.IsNullOrWhiteSpace(o));

foreach (var field in fields)
{
yield return new QueryCondition()
{
Field = field,
Operator = condition.Operator,
SkipValueIsNull = condition.SkipValueIsNull,
Value = condition.Value
};
}

yield break;
}

/// <summary>
/// 根据排序条件进行排序
/// </summary>
Expand Down

0 comments on commit 0f4cf68

Please # to comment.