- 修复 WithTempQuery + ToChunkAsyncEnumerable 报错问题;

This commit is contained in:
2881099
2025-04-27 14:05:04 +08:00
parent a724ada9f1
commit 2ba3c85133
3 changed files with 58 additions and 3 deletions

View File

@@ -621,14 +621,17 @@ namespace base_entity
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#endregion
fsql.Select<User1>().WithTempQuery(a => new { a.Nickname, a.Username }).ToChunk(10, e =>
{
foreach (var item in e.Object)
Console.WriteLine(item.Nickname);
});
Task.Run(async () =>
{
await foreach (var xxs1 in fsql.Select<User1>().ToChunkAsyncEnumerable(10))
await foreach (var xxs1 in fsql.Select<User1>().WithTempQuery(a => new { a.Nickname, a.Username }).ToChunkAsyncEnumerable(10))
{
foreach (var item in xxs1)
{
Console.WriteLine(item.Nickname);
}
}
}).Wait();

View File

@@ -718,6 +718,15 @@
<param name="modelBuilder"></param>
<returns></returns>
</member>
<member name="M:FreeSqlDbContextExtensions.ApplyConfigurationsFromAssembly(FreeSql.ICodeFirst,System.Reflection.Assembly,System.Func{System.Type,System.Boolean})">
<summary>
根据Assembly扫描所有继承IEntityTypeConfiguration&lt;T&gt;的配置类
</summary>
<param name="codeFirst"></param>
<param name="assembly"></param>
<param name="predicate"></param>
<returns></returns>
</member>
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
<summary>
创建普通数据上下文档对象
@@ -755,5 +764,13 @@
<param name="that"></param>
<returns></returns>
</member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members>
</doc>

View File

@@ -234,6 +234,23 @@ namespace FreeSql.Internal.CommonProvider
}
public void ToChunk(int size, Action<FetchCallbackArgs<List<T1>>> done)
{
if (_diymemexpWithTempQuery != null && _diymemexpWithTempQuery is WithTempQueryParser withTempQueryParser)
{
if (withTempQueryParser._outsideTable[0] != _tables[0])
{
var tps = _tables.Select(a =>
{
var tp = Expression.Parameter(a.Table.Type, a.Alias);
a.Parameter = tp;
return tp;
}).ToArray();
this.InternalToChunk<T1>(tps[0], size, done);
return;
}
var af = withTempQueryParser._insideSelectList[0].InsideAf;
this.ToListMrChunkPrivate(size, done, this.ToSql(af.field), af);
return;
}
if (_selectExpression != null) throw new ArgumentException(CoreErrorStrings.Before_Chunk_Cannot_Use_Select);
this.ToListChunkPrivate(size, done, this.GetAllFieldExpressionTreeLevel2(), null);
}
@@ -1769,6 +1786,24 @@ namespace FreeSql.Internal.CommonProvider
}
public IAsyncEnumerable<List<T1>> ToChunkAsyncEnumerable(int size)
{
if (_diymemexpWithTempQuery != null && _diymemexpWithTempQuery is WithTempQueryParser withTempQueryParser)
{
if (withTempQueryParser._outsideTable[0] != _tables[0])
{
var tps = _tables.Select(a =>
{
var tp = Expression.Parameter(a.Table.Type, a.Alias);
a.Parameter = tp;
return tp;
}).ToArray();
return this.InternalToChunkAsyncEnumerable<T1>(tps[0], size);
}
var af = withTempQueryParser._insideSelectList[0].InsideAf;
return new LocalAsyncEnumerable<T1>
{
_GetAsyncEnumerator = (cancellationToken) => this.ToListMrChunkPrivateAsyncEnumerable<T1>(size, this.ToSql(af.field), af, cancellationToken)
};
}
if (_selectExpression != null) throw new ArgumentException(CoreErrorStrings.Before_Chunk_Cannot_Use_Select);
return this.ToListChunkPrivateAsyncEnumerable(size, this.GetAllFieldExpressionTreeLevel2(), null);
}