mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	- 优化 导航属性集合 .Exists 效果与 .Any 相同;
This commit is contained in:
		@@ -800,5 +800,14 @@
 | 
				
			|||||||
            <param name="that"></param>
 | 
					            <param name="that"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            批量注入 Repository,可以参考代码自行调整
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="services"></param>
 | 
				
			||||||
 | 
					            <param name="globalDataFilter"></param>
 | 
				
			||||||
 | 
					            <param name="assemblies"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
    </members>
 | 
					    </members>
 | 
				
			||||||
</doc>
 | 
					</doc>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2502,7 +2502,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                    if (whereGlobalFilter.Any()) select._whereGlobalFilter.AddRange(whereGlobalFilter);
 | 
					                    if (whereGlobalFilter.Any()) select._whereGlobalFilter.AddRange(whereGlobalFilter);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            while (true)
 | 
					            while (exp3Stack.Any())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var exp4 = exp3Stack.Pop();
 | 
					                var exp4 = exp3Stack.Pop();
 | 
				
			||||||
                if (exp4.NodeType == ExpressionType.MemberAccess)
 | 
					                if (exp4.NodeType == ExpressionType.MemberAccess)
 | 
				
			||||||
@@ -2546,8 +2546,15 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                    var callExp = exp4 as MethodCallExpression;
 | 
					                    var callExp = exp4 as MethodCallExpression;
 | 
				
			||||||
                    switch (callExp.Method.Name)
 | 
					                    switch (callExp.Method.Name)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
 | 
					                        case "Exists":
 | 
				
			||||||
                        case "Any":
 | 
					                        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();
 | 
					                                select._tables[0].Parameter = (callExp.Arguments[1] as LambdaExpression)?.Parameters.FirstOrDefault();
 | 
				
			||||||
                                LocalSetSelectProviderAlias(select._tables[0].Parameter.Name);
 | 
					                                LocalSetSelectProviderAlias(select._tables[0].Parameter.Name);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user