Skip to content

Commit 2ba3c85

Browse files
committed
- 修复 WithTempQuery + ToChunkAsyncEnumerable 报错问题;
1 parent a724ada commit 2ba3c85

File tree

3 files changed

+58
-3
lines changed

3 files changed

+58
-3
lines changed

Examples/base_entity/Program.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -621,14 +621,17 @@ static void Main(string[] args)
621621
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
622622
#endregion
623623

624+
fsql.Select<User1>().WithTempQuery(a => new { a.Nickname, a.Username }).ToChunk(10, e =>
625+
{
626+
foreach (var item in e.Object)
627+
Console.WriteLine(item.Nickname);
628+
});
624629
Task.Run(async () =>
625630
{
626-
await foreach (var xxs1 in fsql.Select<User1>().ToChunkAsyncEnumerable(10))
631+
await foreach (var xxs1 in fsql.Select<User1>().WithTempQuery(a => new { a.Nickname, a.Username }).ToChunkAsyncEnumerable(10))
627632
{
628633
foreach (var item in xxs1)
629-
{
630634
Console.WriteLine(item.Nickname);
631-
}
632635
}
633636
}).Wait();
634637

FreeSql.DbContext/FreeSql.DbContext.xml

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,23 @@ internal void ToListChunkPrivate(int chunkSize, Action<FetchCallbackArgs<List<T1
234234
}
235235
public void ToChunk(int size, Action<FetchCallbackArgs<List<T1>>> done)
236236
{
237+
if (_diymemexpWithTempQuery != null && _diymemexpWithTempQuery is WithTempQueryParser withTempQueryParser)
238+
{
239+
if (withTempQueryParser._outsideTable[0] != _tables[0])
240+
{
241+
var tps = _tables.Select(a =>
242+
{
243+
var tp = Expression.Parameter(a.Table.Type, a.Alias);
244+
a.Parameter = tp;
245+
return tp;
246+
}).ToArray();
247+
this.InternalToChunk<T1>(tps[0], size, done);
248+
return;
249+
}
250+
var af = withTempQueryParser._insideSelectList[0].InsideAf;
251+
this.ToListMrChunkPrivate(size, done, this.ToSql(af.field), af);
252+
return;
253+
}
237254
if (_selectExpression != null) throw new ArgumentException(CoreErrorStrings.Before_Chunk_Cannot_Use_Select);
238255
this.ToListChunkPrivate(size, done, this.GetAllFieldExpressionTreeLevel2(), null);
239256
}
@@ -1769,6 +1786,24 @@ internal IAsyncEnumerable<List<T1>> ToListChunkPrivateAsyncEnumerable(int chunkS
17691786
}
17701787
public IAsyncEnumerable<List<T1>> ToChunkAsyncEnumerable(int size)
17711788
{
1789+
if (_diymemexpWithTempQuery != null && _diymemexpWithTempQuery is WithTempQueryParser withTempQueryParser)
1790+
{
1791+
if (withTempQueryParser._outsideTable[0] != _tables[0])
1792+
{
1793+
var tps = _tables.Select(a =>
1794+
{
1795+
var tp = Expression.Parameter(a.Table.Type, a.Alias);
1796+
a.Parameter = tp;
1797+
return tp;
1798+
}).ToArray();
1799+
return this.InternalToChunkAsyncEnumerable<T1>(tps[0], size);
1800+
}
1801+
var af = withTempQueryParser._insideSelectList[0].InsideAf;
1802+
return new LocalAsyncEnumerable<T1>
1803+
{
1804+
_GetAsyncEnumerator = (cancellationToken) => this.ToListMrChunkPrivateAsyncEnumerable<T1>(size, this.ToSql(af.field), af, cancellationToken)
1805+
};
1806+
}
17721807
if (_selectExpression != null) throw new ArgumentException(CoreErrorStrings.Before_Chunk_Cannot_Use_Select);
17731808
return this.ToListChunkPrivateAsyncEnumerable(size, this.GetAllFieldExpressionTreeLevel2(), null);
17741809
}

0 commit comments

Comments
 (0)