mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 修复 AsTable 分表 ToAggregate 无法得到汇总;#1115
This commit is contained in:
parent
792ffd4e07
commit
5a9c92bc54
@ -110,6 +110,7 @@ namespace base_entity
|
||||
public Guid id { get; set; }
|
||||
public string msg { get; set; }
|
||||
public DateTime createtime { get; set; }
|
||||
public int click { get; set; }
|
||||
}
|
||||
|
||||
public class SomeEntity
|
||||
@ -503,14 +504,14 @@ namespace base_entity
|
||||
|
||||
var testitems = new[]
|
||||
{
|
||||
new AsTableLog{ msg = "msg01", createtime = DateTime.Parse("2022-1-1 13:00:11") },
|
||||
new AsTableLog{ msg = "msg02", createtime = DateTime.Parse("2022-1-2 14:00:12") },
|
||||
new AsTableLog{ msg = "msg03", createtime = DateTime.Parse("2022-2-2 15:00:13") },
|
||||
new AsTableLog{ msg = "msg04", createtime = DateTime.Parse("2022-2-8 15:00:13") },
|
||||
new AsTableLog{ msg = "msg05", createtime = DateTime.Parse("2022-3-8 15:00:13") },
|
||||
new AsTableLog{ msg = "msg06", createtime = DateTime.Parse("2022-4-8 15:00:13") },
|
||||
new AsTableLog{ msg = "msg07", createtime = DateTime.Parse("2022-6-8 15:00:13") },
|
||||
new AsTableLog{ msg = "msg07", createtime = DateTime.Parse("2022-7-1") }
|
||||
new AsTableLog{ msg = "msg01", createtime = DateTime.Parse("2022-1-1 13:00:11"), click = 1 },
|
||||
new AsTableLog{ msg = "msg02", createtime = DateTime.Parse("2022-1-2 14:00:12"), click = 2 },
|
||||
new AsTableLog{ msg = "msg03", createtime = DateTime.Parse("2022-2-2 15:00:13"), click = 3 },
|
||||
new AsTableLog{ msg = "msg04", createtime = DateTime.Parse("2022-2-8 15:00:13"), click = 4 },
|
||||
new AsTableLog{ msg = "msg05", createtime = DateTime.Parse("2022-3-8 15:00:13"), click = 5 },
|
||||
new AsTableLog{ msg = "msg06", createtime = DateTime.Parse("2022-4-8 15:00:13"), click = 6 },
|
||||
new AsTableLog{ msg = "msg07", createtime = DateTime.Parse("2022-6-8 15:00:13"), click = 7 },
|
||||
new AsTableLog{ msg = "msg07", createtime = DateTime.Parse("2022-7-1"), click = 8}
|
||||
};
|
||||
var sqlatb = fsql.Insert(testitems).NoneParameter();
|
||||
var sqlat = sqlatb.ToSql();
|
||||
@ -596,6 +597,15 @@ namespace base_entity
|
||||
var sqls601 = sqls6.ToSql();
|
||||
var sqls602 = sqls6.ToList();
|
||||
|
||||
var sqls7 = fsql.Select<AsTableLog>().Where(a => a.createtime < DateTime.Parse("2022-5-1")).ToAggregate(g => new
|
||||
{
|
||||
sum1 = g.Sum(g.Key.click),
|
||||
cou1 = g.Count(),
|
||||
avg1 = g.Avg(g.Key.click),
|
||||
min = g.Min(g.Key.click),
|
||||
max = g.Max(g.Key.click)
|
||||
});
|
||||
|
||||
fsql.Aop.AuditValue += new EventHandler<FreeSql.Aop.AuditValueEventArgs>((_, e) =>
|
||||
{
|
||||
|
||||
|
@ -786,14 +786,5 @@
|
||||
<param name="that"></param>
|
||||
<returns></returns>
|
||||
</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>
|
||||
</doc>
|
||||
|
@ -1084,7 +1084,38 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var index = 0;
|
||||
|
||||
_commonExpression.ReadAnonymousField(_tables, field, map, ref index, select, null, null, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
|
||||
return this.ToListMapReader<TReturn>(new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null)).FirstOrDefault();
|
||||
var af = new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null);
|
||||
if (GetTableRuleUnions().Count <= 1) return this.ToListMapReader<TReturn>(af).FirstOrDefault();
|
||||
|
||||
var affield = af.field;
|
||||
var allMemExps = new FindAllMemberExpressionVisitor(this);
|
||||
allMemExps.Visit(select);
|
||||
field.Clear();
|
||||
var fieldAlias = new Dictionary<string, bool>();
|
||||
var fieldReplaced = new Dictionary<string, bool>();
|
||||
foreach (var memExp in allMemExps.Result)
|
||||
{
|
||||
var gef = GetExpressionField(memExp.Item1, FieldAliasOptions.AsProperty);
|
||||
var geffield = gef.field;
|
||||
if (fieldReplaced.ContainsKey(geffield)) continue;
|
||||
fieldReplaced.Add(geffield, true);
|
||||
|
||||
field.Append(", ").Append(gef.field);
|
||||
if (fieldAlias.ContainsKey(memExp.Item2.Attribute.Name))
|
||||
{
|
||||
field.Append(_commonUtils.FieldAsAlias($"aas{fieldAlias.Count}"));
|
||||
affield = affield.Replace(geffield, $"ftba.aas{fieldAlias.Count}");
|
||||
}
|
||||
else
|
||||
{
|
||||
fieldAlias.Add(memExp.Item2.Attribute.Name, true);
|
||||
affield = affield.Replace(geffield, $"ftba.{string.Join(".", geffield.Split('.').Skip(1))}");
|
||||
}
|
||||
}
|
||||
|
||||
var sql = this.ToSql(field.Remove(0, 2).ToString());
|
||||
sql = $"{_select} {affield} FROM ( \r\n {sql.Replace("\r\n", "\r\n ")}\r\n) ftba";
|
||||
return ToListMrPrivate<TReturn>(sql, af, null).FirstOrDefault();
|
||||
}
|
||||
finally
|
||||
{
|
||||
@ -1543,7 +1574,38 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var index = 0;
|
||||
|
||||
_commonExpression.ReadAnonymousField(_tables, field, map, ref index, select, null, null, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
|
||||
return (await this.ToListMapReaderAsync<TReturn>(new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null), cancellationToken)).FirstOrDefault();
|
||||
var af = new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null);
|
||||
if (GetTableRuleUnions().Count <= 1) return (await this.ToListMapReaderAsync<TReturn>(af, cancellationToken)).FirstOrDefault();
|
||||
|
||||
var affield = af.field;
|
||||
var allMemExps = new FindAllMemberExpressionVisitor(this);
|
||||
allMemExps.Visit(select);
|
||||
field.Clear();
|
||||
var fieldAlias = new Dictionary<string, bool>();
|
||||
var fieldReplaced = new Dictionary<string, bool>();
|
||||
foreach (var memExp in allMemExps.Result)
|
||||
{
|
||||
var gef = GetExpressionField(memExp.Item1, FieldAliasOptions.AsProperty);
|
||||
var geffield = gef.field;
|
||||
if (fieldReplaced.ContainsKey(geffield)) continue;
|
||||
fieldReplaced.Add(geffield, true);
|
||||
|
||||
field.Append(", ").Append(gef.field);
|
||||
if (fieldAlias.ContainsKey(memExp.Item2.Attribute.Name))
|
||||
{
|
||||
field.Append(_commonUtils.FieldAsAlias($"aas{fieldAlias.Count}"));
|
||||
affield = affield.Replace(geffield, $"ftba.aas{fieldAlias.Count}");
|
||||
}
|
||||
else
|
||||
{
|
||||
fieldAlias.Add(memExp.Item2.Attribute.Name, true);
|
||||
affield = affield.Replace(geffield, $"ftba.{string.Join(".", geffield.Split('.').Skip(1))}");
|
||||
}
|
||||
}
|
||||
|
||||
var sql = this.ToSql(field.Remove(0, 2).ToString());
|
||||
sql = $"{_select} {affield} FROM ( \r\n {sql.Replace("\r\n", "\r\n ")}\r\n) ftba";
|
||||
return (await ToListMrPrivateAsync<TReturn>(sql, af, null, cancellationToken)).FirstOrDefault();
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user