C# 对具有多个可能为空的其他集合的表实现全局搜索

C# 对具有多个可能为空的其他集合的表实现全局搜索,c#,jquery,asp.net,datatables,C#,Jquery,Asp.net,Datatables,我们目前正在使用jQuery数据表来显示不同的开放票据。结构基本上是所有不同类型的票据都有相同的基本字段,但其他字段根据其类型不同而有所不同 例如,基本字段是: id, userid (FK), dateRequested, dateCompleted, ticketTypeId (FK), description 其他表与不同的票证类型关联,如: move ticket: id, baseFieldsId (FK), equipmentName, newLocation sw install

我们目前正在使用jQuery数据表来显示不同的开放票据。结构基本上是所有不同类型的票据都有相同的基本字段,但其他字段根据其类型不同而有所不同

例如,基本字段是:

id, userid (FK), dateRequested, dateCompleted, ticketTypeId (FK), description
其他表与不同的票证类型关联,如:

move ticket: id, baseFieldsId (FK), equipmentName, newLocation
sw install ticket: id, baseFieldsId (FK), equipmentName, softwareName, softwareVersion
troubleshoot ticket: id, baseFieldsId (FK), equipmentName, issue
每个基本字段可以有多张票据(就像一张票据一样,移动3个不同的设备)

其思想是搜索所有打开的票据,datatable显示基本字段,我实现了一种按行显示扩展视图的方法,以显示行项目。搜索时,我希望能够搜索基本字段,以及用于匹配搜索文本实例的特定字段

我们目前的做法是:

pageData是基本字段实体的类型,基本字段实体具有多个不同票证类型的不同集合

pageData.Where(a =>
   a.id.ToString().Contains(search) ||
   a.description.Contains(search) ||
   string.Concat(a.User.FirstName, " ", a.User.LastName).Contains(search) ||
   a.TicketType.TicketTypeName.Contains(search) ||
   a.moveTicket.Select(n => n.equipmentName).Contains(search) ||
   a.moveTicket.Select(n => n.newLocation).Contains(search) ||
   ...
等等,等等。大约有17种不同的门票类型(以及相应的表格)


当前的搜索方法需要很长时间(有超过7000个基本字段行,潜在的其他表有1-many)。有哪些选项可以加快搜索速度?无法链接到该页面,因为它位于intranet网络上。

为什么会有17个表,而一个表有一个额外的列,该列的值为1-17,用于区分单独表的原因?这个设计听起来很不对劲。如果使用SQL server,则一个存储过程调用最有意义。只是不清楚为什么我们有17张桌子。我的意思是,我们没有每个月的一个数据表,只需添加一列有日期的数据,因此我们不需要12个表,只需要一个。这称为数据库规范化。匹配或搜索一个大约400000行的小数据库应该在1秒之内完成。