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;