我目前正在尝试做以下事情。
这样做没有问题,可以正常工作,但嵌套的foreach循环在添加范围时速度相当慢。如果在循环之前使用groups.toList(),那么这个语句就变得很慢了,而嵌套的循环则很快。
我的问题是:
是否有可能根据这些动态的StatusIds和PriorityIds从一开始就过滤掉组?如何实现?
Stackoverflow根据我的主题推荐了一些基于表达式树的文章......那是我需要研究的吗?
谢谢!
编辑:
所以现在我正在做这个:
var groups = MileId == null ? test.Groups.Where(x => x.ProjectId == ProjectId)
: test.Groups.Where(x => x.Milestone == MileId &&
x.ProjectId == ProjectId);
但我也有额外的条件需要按组过滤:
foreach (var ChartItem in ChartItems)
{
foreach (var StatusItem in ChartItem.ChartStatusItems)
{
foreach (var PriorityItem in StatusItem.ChartPriorityItems)
{
filteredgroups.AddRange(
groups.Where(x => x.Status == StatusItem.StatusID
&& x.Priority == PriorityItem.PriorityID));
}
}
}
这样做没有问题,可以正常工作,但嵌套的foreach循环在添加范围时速度相当慢。如果在循环之前使用groups.toList(),那么这个语句就变得很慢了,而嵌套的循环则很快。
我的问题是:
是否有可能根据这些动态的StatusIds和PriorityIds从一开始就过滤掉组?如何实现?
Stackoverflow根据我的主题推荐了一些基于表达式树的文章......那是我需要研究的吗?
谢谢!
编辑:
所以现在我正在做这个:
foreach (var ChartItem in ChartItems)
{
foreach (var StatusItem in ChartItem.ChartStatusItems)
{
foreach (var PriorityItem in StatusItem.ChartPriorityItems)
{
var groups = MileId == null ? test.Groups.Where(x => x.ProjectId == InspectorProjectId &&
x.Status == StatusItem.StatusID &&
x.Priority == PriorityItem.PriorityID)
: test.Groups.Where(x => x.Milestone == InspectorMileId &&
x.ProjectId == InspectorProjectId &&
x.Status == StatusItem.StatusID &&
x.Priority == PriorityItem.PriorityID);
filteredgroups.AddRange(groups);
}
}
}
这是一个很大的改进,但每个优先级仍然需要发送到缓慢的“测试”服务器。如果我能一次性过滤掉所有问题,那就太理想了。
编辑2:哦,我没有直接访问数据库的权限:( 我们通过API来访问它。
test.Groups
是什么?它是在访问数据库吗?这个列表大约包含多少项? - svick