From 8c5f3679ad217c7c1d0edff2e12a957a8e60750e Mon Sep 17 00:00:00 2001
From: 2881099 <2881099@qq.com>
Date: Sun, 20 Apr 2025 16:30:47 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E8=A1=A5=E5=85=85=20ZeroDbContext=20Where?=
=?UTF-8?q?=20=E6=9F=A5=E8=AF=A2=E6=96=B9=E6=B3=95=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ZeroDbContext.SelectImpl.cs | 78 ++++++++++++-------
1 file changed, 49 insertions(+), 29 deletions(-)
diff --git a/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.SelectImpl.cs b/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.SelectImpl.cs
index f1d8cda75..c797062e9 100644
--- a/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.SelectImpl.cs
+++ b/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.SelectImpl.cs
@@ -586,21 +586,39 @@ namespace FreeSql.Extensions.ZeroEntity
return this;
}
///
- /// Where(new { Year = 2017, CategoryId = 198, IsPublished = true })
- /// WHERE [Year] = 2017 AND [CategoryId] = 198 AND [IsPublished] = 1
+ /// WHERE [field] IN (...)
///
- public SelectImpl Where(object multipleFields)
+ public SelectImpl WhereIn(string field, object value) => Where(field, "in", value);
+ ///
+ /// WHERE [field] NOT IN (...)
+ ///
+ public SelectImpl WhereNotIn(string field, object value) => Where(field, "!in", value);
+ ///
+ /// Where(new { Year = 2017, CategoryId = 198, IsPublished = true })
+ /// WHERE [Year] = 2017 AND [CategoryId] = 198 AND [IsPublished] = 1
+ ///
+ public SelectImpl Where(object multipleFields)
{
if (multipleFields == null) return this;
foreach (var prop in multipleFields.GetType().GetProperties())
WhereDynamicFilter(new DynamicFilterInfo { Field = prop.Name, Operator = DynamicFilterOperator.Eq, Value = prop.GetValue(multipleFields, null) });
return this;
}
- ///
- /// WHERE [field] = ..
- ///
- public SelectImpl Where(string field, object value) => WhereDynamicFilter(new DynamicFilterInfo { Field = field, Operator = DynamicFilterOperator.Eq, Value = value });
- public SelectImpl Where(string field, string @operator, object value)
+ ///
+ /// WHERE [field] = ..
+ /// 更全请看重载 Where(string field, string @operator, object value)
+ ///
+ public SelectImpl Where(string field, object value) => WhereDynamicFilter(new DynamicFilterInfo { Field = field, Operator = DynamicFilterOperator.Eq, Value = value });
+ ///
+ /// WHERE [field]
+ /// !=、>、>=、<、<=、like、!like、in、!in
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public SelectImpl Where(string field, string @operator, object value)
{
switch (@operator?.ToLower().Trim())
{
@@ -631,7 +649,7 @@ namespace FreeSql.Extensions.ZeroEntity
case "!in":
case "notin":
case "not in":
- return WhereDynamicFilter(new DynamicFilterInfo { Field = field, Operator = DynamicFilterOperator.Any, Value = value });
+ return WhereDynamicFilter(new DynamicFilterInfo { Field = field, Operator = DynamicFilterOperator.NotAny, Value = value });
}
throw new Exception($"未实现 {@operator}");
}
@@ -741,26 +759,28 @@ namespace FreeSql.Extensions.ZeroEntity
return query;
}
}
- public SelectImpl WhereExists(Func q)
- {
- var query = q?.Invoke(new SubQuery { _parentQuery = this });
- switch (_orm.Ado.DataType)
- {
- case DataType.Oracle:
- case DataType.OdbcOracle:
- case DataType.CustomOracle:
- case DataType.Dameng:
- case DataType.GBase:
- query.Limit(-1);
- break;
- default:
- query.Limit(1); //#462 ORACLE rownum <= 2 会影响索引变慢
- break;
- }
- _selectProvider._where.Append($" AND EXISTS({query.ToSql("1").Replace(" \r\n", " \r\n ")})");
- return this;
- }
- public SelectImpl GroupByRaw(string sql)
+ SelectImpl WhereExists(Func q, bool notExists)
+ {
+ var query = q?.Invoke(new SubQuery { _parentQuery = this });
+ switch (_orm.Ado.DataType)
+ {
+ case DataType.Oracle:
+ case DataType.OdbcOracle:
+ case DataType.CustomOracle:
+ case DataType.Dameng:
+ case DataType.GBase:
+ query.Limit(-1);
+ break;
+ default:
+ query.Limit(1); //#462 ORACLE rownum <= 2 会影响索引变慢
+ break;
+ }
+ _selectProvider._where.Append($" AND {(notExists ? "NOT " : "")}EXISTS({query.ToSql("1").Replace(" \r\n", " \r\n ")})");
+ return this;
+ }
+ public SelectImpl WhereExists(Func q) => WhereExists(q, false);
+ public SelectImpl WhereNotExists(Func q) => WhereExists(q, true);
+ public SelectImpl GroupByRaw(string sql)
{
if (string.IsNullOrWhiteSpace(sql)) return this;
_useStates = false;