我正在使用 EF Core 8 将 WCF 应用程序迁移到 Blazor WebAssembly。 在 WCF 中,从视图中获取数据(200K 条记录)需要 10-12 秒。
我的表总共包含大约。 4500 万行,其中我过滤的行有 200000 行。
当我尝试使用 EF Core 时,需要 3 分钟。应该会在更短的时间内获取它。
我的方法如下:
public async Task<Stream> ReportDatAsync(DatbaseContext dbContext. DataDto params, CancellationToken ct)
{
IDictionary<string, string?> searchParams = new Dictionary<string, string?>
{
{ "Year", string.Join(",",params.Year) },
{ "Month", string.Join(",", params.Period) },
{ "Type", string.Join(",", params.Type) }
};
var queryBuilder = new StringBuilder(@"SELECT * FROM table WHERE 1=1");
foreach (var filter in searchParams)
{
if (filter.Value != null && filter.Value.Any())
{
var formattedValues = string.Join(",", filter.Value.Split(',').Select(v => $"'{v.Trim()}'"));
queryBuilder.Append($" AND {filter.Key} IN ({formattedValues})");
}
}
var queryString = queryBuilder.ToString();
var queryText = dbContext.table.FromSqlRaw(queryString).AsNoTracking();
var data1 = await queryText.ToListAsync(ct);
}
我不想将结果集绑定到任何模型。我在 WCF 中具有与
System.Data.Entity
相同的逻辑,它在 10-12 秒内获取数据。
我的应用程序不支持多线程同时进行多个查询。
提前感谢您的投入。