在填充 ADO.NET 对象之前筛选记录集

Filter Record Set Before Populating ADO.NET Object

我使用 this tutorial 在我的应用程序中构建了一个 Crystal 报告。本教程指导用户开发 ADO.NET 对象,然后用数据填充它。我还在 Crystal 报告中使用一个参数来限制数据集。我遇到的问题是加载报告很慢,我想知道这是否是因为在 Crystal 报告使用参数过滤器之前我必须加载比实际需要更多的数据。

以下是我现有的代码,它在报表查看器表单加载事件上运行。我想调整下面的代码以传递一个参数,这样我就可以在数据加载时对其进行过滤,而不是加载一堆我知道我不需要或不会使用的数据。

private void InspectionReportSerial2_Viewer_Load(object sender, EventArgs e)
{
    International_PZD_PRDEntities db = new International_PZD_PRDEntities();
    var list = db.vw_Nightly_and_Inspections.Select(p=>new {ID = p.ID,
        SerialNumber = p.SerialNumber, ProductionOrder = p.ProductionOrder,
        Product=p.Product, Customer=p.Customer, SalesOrder = p.SalesOrder,
        LineItem = p.LineItem, Section=p.Section,InspectionPoint=p.InspectionPoint,
        Status=p.Status,SectionSignoffBy = p.SectionSignoffBy,
        SectionSignoffCheck=p.SectionSignoffCheck,
        SectionSignoffDate = p.SectionSignoffDate,HardwareSerial=p.HardwareSerial,
        SectionSortString = p.SectionSortString, ItemSortString = p.ItemSortString,
        Comment = p.Comment});
    InspectionReportSerial21.SetDataSource(list);
}

加一个Where。由于你没有描述你需要的那种过滤,我只能举个例子:

private void InspectionReportSerial2_Viewer_Load(object sender, EventArgs e)
{
    International_PZD_PRDEntities db = new International_PZD_PRDEntities();
    var list = db.vw_Nightly_and_Inspections
        .Where(p => p.Customer == "Dekxblock")
        .Select(p => new { ID = p.ID, SerialNumber = p.SerialNumber, ... });
    InspectionReportSerial21.SetDataSource(list);
}

我不知道 International_PZD_PRDEntities 是什么。如果它是某种 O/R-mapper(例如 EF 或 EF Core),那么这将在数据库端过滤记录,这比在您的应用程序中过滤数据更快,因为需要传输的记录更少。如果没有,那么您应该执行 SELECT * FROM vw_Nightly_and_Inspections WHERE Customer = 'Dekxblock' 之类的查询,包括过滤器。确保使用 Command.Parameters