如何在C#中高效地过滤和分组记录

问题描述 投票:0回答:1

表格

Work
具有三列:
ID
Region
Worker

并且有两个下拉列表。

DropDown A:选择并过滤

Region
,与数据
region
绑定到
regions

DropDown B:选择并过滤

Worker
,与数据
worker
绑定到
workers

流程:用户选择region,然后选择该region的worker

初始化:

List<Work> works = new(); 
works = GetWorks(); //get all the records from the table
List<string> regions = new();
List<string> workers = new();
regions = works.Select(w=>w.region).Distinct().ToList();

当用户选择区域时

workers = works.Where(w=>w.Region == region).Select(w=>w.worker).Distinct().ToList();

但是,当有数千条记录时,速度会非常慢。

如何更有效地实现这一目标?谢谢!

c# asp.net linq blazor
1个回答
0
投票

看起来

GetWorks
可能会返回
List
IEnumerable
。这里的问题是将所有这些数据加载到内存中可能会出现问题。本质上,该解决方案涉及将工作委托给数据库:使
GetWorks
返回
IQueryable
。这样,当您执行
works.select(w => w.region).Distinct()
时,该操作将在数据库中执行。
works.select(w => w.region).Distinct()
也是如此。只有在
BlazorServer
工作才能实现这一目标。

如果您使用 Blazor-WASM,则需要公开服务

GetRegions
GetWorkers

奖励轨道:标准化数据库并创建

Region
模型。

© www.soinside.com 2019 - 2024. All rights reserved.