mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 修复 UseGenerateCommandParameterWithLambda(true) 与 GroupBy 查询不生效 bug;
This commit is contained in:
parent
fb6b539280
commit
fe9e108c5b
@ -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>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using FreeSql.DataAnnotations;
|
using FreeSql.DataAnnotations;
|
||||||
|
using FreeSql.Internal.CommonProvider;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
@ -181,6 +182,91 @@ WHERE (('name01' = a.""Name"" AND 1 = a.""Click"" OR a.""Click"" > 10) OR ('name
|
|||||||
var sql1133333 = select.Where(a => !inarray2n.Contains(a.Int)).ToList();
|
var sql1133333 = select.Where(a => !inarray2n.Contains(a.Int)).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void SubSelectUseGenerateCommandParameterWithLambda()
|
||||||
|
{
|
||||||
|
using (var fsql = new FreeSqlBuilder()
|
||||||
|
.UseConnectionString(DataType.Sqlite, "data source=:memory:")
|
||||||
|
.UseConnectionString(DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=issues684;Pooling=true;Max Pool Size=3;TrustServerCertificate=true")
|
||||||
|
.UseGenerateCommandParameterWithLambda(true)
|
||||||
|
.UseAutoSyncStructure(true)
|
||||||
|
.UseMonitorCommand(null, (cmd, log) => Trace.WriteLine(log))
|
||||||
|
.Build())
|
||||||
|
{
|
||||||
|
var guidval = Guid.NewGuid();
|
||||||
|
var strval = "nameval";
|
||||||
|
var timeval = DateTime.Now;
|
||||||
|
var decval1 = 1.1M;
|
||||||
|
var decval2 = 2.2M;
|
||||||
|
|
||||||
|
var subselect = fsql.Select<ssugcpwl01>();
|
||||||
|
var sql = subselect.ToSql(a => new
|
||||||
|
{
|
||||||
|
a.id, a.name, a.createTime,
|
||||||
|
sum1 = fsql.Select<TableAllType>().Where(b => b.Guid == guidval).Sum(b => b.Int),
|
||||||
|
sum2 = fsql.Select<TableAllType>().Where(b => b.String == strval).Sum(b => b.Long),
|
||||||
|
sum3 = fsql.Select<TableAllType>().Where(b => b.DateTime == timeval).Sum(b => b.Decimal),
|
||||||
|
sum4 = fsql.Select<TableAllType>().Where(b => b.Decimal == decval1).Sum(b => b.Decimal),
|
||||||
|
sum5 = fsql.Select<TableAllType>().Where(b => b.Decimal == decval2).Sum(b => b.Decimal),
|
||||||
|
});
|
||||||
|
var subselect0 = subselect as Select0Provider;
|
||||||
|
Assert.Equal(5, subselect0._params.Count);
|
||||||
|
Assert.Equal("@exp_0", subselect0._params[0].ParameterName);
|
||||||
|
Assert.Equal("@exp_1", subselect0._params[1].ParameterName);
|
||||||
|
Assert.Equal("@exp_2", subselect0._params[2].ParameterName);
|
||||||
|
Assert.Equal("@exp_3", subselect0._params[3].ParameterName);
|
||||||
|
Assert.Equal("@exp_4", subselect0._params[4].ParameterName);
|
||||||
|
Assert.Equal(@"SELECT a.[id] as1, a.[name] as2, a.[createTime] as3, isnull((SELECT sum(b.[Int])
|
||||||
|
FROM [tb_alltype] b
|
||||||
|
WHERE (b.[Guid] = @exp_0)), 0) as4, isnull((SELECT sum(b.[Long])
|
||||||
|
FROM [tb_alltype] b
|
||||||
|
WHERE (b.[String] = @exp_1)), 0) as5, isnull((SELECT sum(b.[Decimal])
|
||||||
|
FROM [tb_alltype] b
|
||||||
|
WHERE (b.[DateTime] = @exp_2)), 0) as6, isnull((SELECT sum(b.[Decimal])
|
||||||
|
FROM [tb_alltype] b
|
||||||
|
WHERE (b.[Decimal] = @exp_3)), 0) as7, isnull((SELECT sum(b.[Decimal])
|
||||||
|
FROM [tb_alltype] b
|
||||||
|
WHERE (b.[Decimal] = @exp_4)), 0) as8
|
||||||
|
FROM [ssugcpwl01] a", sql);
|
||||||
|
|
||||||
|
var groupselect = fsql.Select<ssugcpwl01>().GroupBy(a => a.name);
|
||||||
|
sql = groupselect.ToSql(a => new
|
||||||
|
{
|
||||||
|
a.Key,
|
||||||
|
sum1 = fsql.Select<TableAllType>().Where(b => b.Guid == guidval).Sum(b => b.Int),
|
||||||
|
sum2 = fsql.Select<TableAllType>().Where(b => b.String == strval).Sum(b => b.Long),
|
||||||
|
sum3 = fsql.Select<TableAllType>().Where(b => b.DateTime == timeval).Sum(b => b.Decimal),
|
||||||
|
sum4 = fsql.Select<TableAllType>().Where(b => b.Decimal == decval1).Sum(b => b.Decimal),
|
||||||
|
sum5 = fsql.Select<TableAllType>().Where(b => b.Decimal == decval2).Sum(b => b.Decimal),
|
||||||
|
});
|
||||||
|
var groupselect0 = groupselect as SelectGroupingProvider;
|
||||||
|
Assert.Equal(5, groupselect0._select._params.Count);
|
||||||
|
Assert.Equal("@exp_0", groupselect0._select._params[0].ParameterName);
|
||||||
|
Assert.Equal("@exp_1", groupselect0._select._params[1].ParameterName);
|
||||||
|
Assert.Equal("@exp_2", groupselect0._select._params[2].ParameterName);
|
||||||
|
Assert.Equal("@exp_3", groupselect0._select._params[3].ParameterName);
|
||||||
|
Assert.Equal("@exp_4", groupselect0._select._params[4].ParameterName);
|
||||||
|
Assert.Equal(@"SELECT a.[name] as1, isnull((SELECT sum(b.[Int])
|
||||||
|
FROM [tb_alltype] b
|
||||||
|
WHERE (b.[Guid] = @exp_0)), 0) as2, isnull((SELECT sum(b.[Long])
|
||||||
|
FROM [tb_alltype] b
|
||||||
|
WHERE (b.[String] = @exp_1)), 0) as3, isnull((SELECT sum(b.[Decimal])
|
||||||
|
FROM [tb_alltype] b
|
||||||
|
WHERE (b.[DateTime] = @exp_2)), 0) as4, isnull((SELECT sum(b.[Decimal])
|
||||||
|
FROM [tb_alltype] b
|
||||||
|
WHERE (b.[Decimal] = @exp_3)), 0) as5, isnull((SELECT sum(b.[Decimal])
|
||||||
|
FROM [tb_alltype] b
|
||||||
|
WHERE (b.[Decimal] = @exp_4)), 0) as6
|
||||||
|
FROM [ssugcpwl01] a
|
||||||
|
GROUP BY a.[name]", sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class ssugcpwl01
|
||||||
|
{
|
||||||
|
public Guid id { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
public DateTime createTime { get; set; }
|
||||||
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ArrayUseGenerateCommandParameterWithLambda()
|
public void ArrayUseGenerateCommandParameterWithLambda()
|
||||||
{
|
{
|
||||||
|
@ -173,7 +173,7 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (select != null && findIncludeMany != null && select._includeToList.Any() && exp.Type.IsGenericType &&
|
if (_tables != null && select != null && findIncludeMany != null && select._includeToList.Any() && exp.Type.IsGenericType &&
|
||||||
typeof(IEnumerable).IsAssignableFrom(exp.Type) &&
|
typeof(IEnumerable).IsAssignableFrom(exp.Type) &&
|
||||||
typeof(ICollection<>).MakeGenericType(exp.Type.GetGenericArguments().FirstOrDefault()).IsAssignableFrom(exp.Type))
|
typeof(ICollection<>).MakeGenericType(exp.Type.GetGenericArguments().FirstOrDefault()).IsAssignableFrom(exp.Type))
|
||||||
{
|
{
|
||||||
|
@ -115,7 +115,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
var field = new StringBuilder();
|
var field = new StringBuilder();
|
||||||
var index = 0;
|
var index = 0;
|
||||||
|
|
||||||
_comonExp.ReadAnonymousField(null, _select._tableRule, field, map, ref index, select, null, this, null, null, null, false);
|
_comonExp.ReadAnonymousField(null, _select._tableRule, field, map, ref index, select, _select, this, null, null, null, false);
|
||||||
if (map.Childs.Any() == false && map.MapType == null) map.MapType = elementType;
|
if (map.Childs.Any() == false && map.MapType == null) map.MapType = elementType;
|
||||||
var method = _select.GetType().GetMethod("ToListMrPrivate", BindingFlags.Instance | BindingFlags.NonPublic);
|
var method = _select.GetType().GetMethod("ToListMrPrivate", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||||
method = method.MakeGenericMethod(elementType);
|
method = method.MakeGenericMethod(elementType);
|
||||||
@ -128,7 +128,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
var field = new StringBuilder();
|
var field = new StringBuilder();
|
||||||
var index = 0;
|
var index = 0;
|
||||||
|
|
||||||
_comonExp.ReadAnonymousField(null, _select._tableRule, field, map, ref index, elementSelector, null, this, null, null, null, false);
|
_comonExp.ReadAnonymousField(null, _select._tableRule, field, map, ref index, elementSelector, _select, this, null, null, null, false);
|
||||||
if (map.Childs.Any() == false && map.MapType == null) map.MapType = elementType;
|
if (map.Childs.Any() == false && map.MapType == null) map.MapType = elementType;
|
||||||
var method = _select.GetType().GetMethod("ToListMrPrivate", BindingFlags.Instance | BindingFlags.NonPublic);
|
var method = _select.GetType().GetMethod("ToListMrPrivate", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||||
method = method.MakeGenericMethod(elementType);
|
method = method.MakeGenericMethod(elementType);
|
||||||
@ -143,7 +143,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
var field = new StringBuilder();
|
var field = new StringBuilder();
|
||||||
var index = fieldAlias == FieldAliasOptions.AsProperty ? CommonExpression.ReadAnonymousFieldAsCsName : 0;
|
var index = fieldAlias == FieldAliasOptions.AsProperty ? CommonExpression.ReadAnonymousFieldAsCsName : 0;
|
||||||
|
|
||||||
_comonExp.ReadAnonymousField(null, _select._tableRule, field, map, ref index, select, null, this, null, null, null, false);
|
_comonExp.ReadAnonymousField(null, _select._tableRule, field, map, ref index, select, _select, this, null, null, null, false);
|
||||||
var fieldSql = field.Length > 0 ? field.Remove(0, 2).ToString() : null;
|
var fieldSql = field.Length > 0 ? field.Remove(0, 2).ToString() : null;
|
||||||
return InternalToSql(fieldSql);
|
return InternalToSql(fieldSql);
|
||||||
}
|
}
|
||||||
@ -269,7 +269,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
var index = 0;
|
var index = 0;
|
||||||
|
|
||||||
_lambdaParameter = select?.Parameters[0];
|
_lambdaParameter = select?.Parameters[0];
|
||||||
_comonExp.ReadAnonymousField(null, _select._tableRule, field, map, ref index, select, null, this, null, null, null, false);
|
_comonExp.ReadAnonymousField(null, _select._tableRule, field, map, ref index, select, _select, this, null, null, null, false);
|
||||||
if (map.Childs.Any() == false && map.MapType == null) map.MapType = typeof(TReturn);
|
if (map.Childs.Any() == false && map.MapType == null) map.MapType = typeof(TReturn);
|
||||||
var method = _select.GetType().GetMethod("ToListMrPrivateAsync", BindingFlags.Instance | BindingFlags.NonPublic);
|
var method = _select.GetType().GetMethod("ToListMrPrivateAsync", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||||
method = method.MakeGenericMethod(typeof(TReturn));
|
method = method.MakeGenericMethod(typeof(TReturn));
|
||||||
@ -283,7 +283,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
var index = 0;
|
var index = 0;
|
||||||
|
|
||||||
_lambdaParameter = elementSelector?.Parameters[0];
|
_lambdaParameter = elementSelector?.Parameters[0];
|
||||||
_comonExp.ReadAnonymousField(null, _select._tableRule, field, map, ref index, elementSelector, null, this, null, null, null, false);
|
_comonExp.ReadAnonymousField(null, _select._tableRule, field, map, ref index, elementSelector, _select, this, null, null, null, false);
|
||||||
if (map.Childs.Any() == false && map.MapType == null) map.MapType = typeof(TElement);
|
if (map.Childs.Any() == false && map.MapType == null) map.MapType = typeof(TElement);
|
||||||
var method = _select.GetType().GetMethod("ToListMrPrivateAsync", BindingFlags.Instance | BindingFlags.NonPublic);
|
var method = _select.GetType().GetMethod("ToListMrPrivateAsync", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||||
method = method.MakeGenericMethod(typeof(TElement));
|
method = method.MakeGenericMethod(typeof(TElement));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user