From f3df5c7ec0ea5514d6469a6a400fc24da41a0ef3 Mon Sep 17 00:00:00 2001
From: 2881099 <2881099@qq.com>
Date: Tue, 8 Nov 2022 19:03:09 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20=E5=AF=BC=E8=88=AA?=
=?UTF-8?q?=E5=B1=9E=E6=80=A7=E9=9B=86=E5=90=88=20.Exists=20=E6=95=88?=
=?UTF-8?q?=E6=9E=9C=E4=B8=8E=20.Any=20=E7=9B=B8=E5=90=8C=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql.DbContext/FreeSql.DbContext.xml | 9 +++++++++
FreeSql/Internal/CommonExpression.cs | 11 +++++++++--
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 537315e2..26522f10 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -800,5 +800,14 @@
+
+
+ 批量注入 Repository,可以参考代码自行调整
+
+
+
+
+
+
diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs
index 1dd8ff87..1f295768 100644
--- a/FreeSql/Internal/CommonExpression.cs
+++ b/FreeSql/Internal/CommonExpression.cs
@@ -2502,7 +2502,7 @@ namespace FreeSql.Internal
if (whereGlobalFilter.Any()) select._whereGlobalFilter.AddRange(whereGlobalFilter);
}
}
- while (true)
+ while (exp3Stack.Any())
{
var exp4 = exp3Stack.Pop();
if (exp4.NodeType == ExpressionType.MemberAccess)
@@ -2546,8 +2546,15 @@ namespace FreeSql.Internal
var callExp = exp4 as MethodCallExpression;
switch (callExp.Method.Name)
{
+ case "Exists":
case "Any":
- if (callExp.Arguments.Count == 2)
+ if (callExp.Method.Name == "Exists" && callExp.Arguments.Count == 1 && callExp.Type.IsGenericType && callExp.Type.GetGenericTypeDefinition().IsAssignableFrom(typeof(IList<>)))
+ {
+ select._tables[0].Parameter = (callExp.Arguments[0] as LambdaExpression)?.Parameters.FirstOrDefault();
+ LocalSetSelectProviderAlias(select._tables[0].Parameter.Name);
+ select.InternalWhere(callExp.Arguments[0]);
+ }
+ if (callExp.Method.Name == "Any" && callExp.Arguments.Count == 2)
{
select._tables[0].Parameter = (callExp.Arguments[1] as LambdaExpression)?.Parameters.FirstOrDefault();
LocalSetSelectProviderAlias(select._tables[0].Parameter.Name);