C# 用于广泛搜索的体系结构是什么

C# 用于广泛搜索的体系结构是什么,c#,sql-server,search,architecture,C#,Sql Server,Search,Architecture,我们现在正在构建的一个功能是搜索人员 在开始simple时,我们使用LINQtoEntities进行搜索,如下所示:entities.People.Wherez=>z.Birthdate

我们现在正在构建的一个功能是搜索人员

在开始simple时,我们使用LINQtoEntities进行搜索,如下所示:entities.People.Wherez=>z.Birthdate 然后,当添加新的searchcriteria时,linq语句不断增长,现在我们必须重构它,因为没有人再理解它了

在这一点上,我们必须促进8个相关项目的搜索,如“你在这里工作过吗”、“你会说这种语言”、“从这6项技能中,你掌握了哪些技能”等

所有这些项在SqlServer中都是1:N或N:N关系,我们正在搜索多个项,我们想知道您有多少匹配项

例如:我们寻找说法语或英语或德语的人,我们想让所有至少有一个匹配项的人,对于这些人,我们想知道每个人有多少个匹配项,即三分之一或三分之二

在这一点上,问题是:在数据库中约有10000人做什么是明智之举

头脑风暴使我们有以下选择:

在数据库中进行最快的搜索,以便检索有限的数据 记录的数量,并按代码对其余记录进行排序 继续与Linq合作 在SqlServer中执行整个操作
有什么建议可以让我们开始吗?

如果Linq to Entities表达式变得太复杂,这就意味着您的需求发展得相当快

考虑到数据库10K记录的总大小很小,您可能会发现编写SQL或Linq to Entities语句(返回所有可能匹配的人)并在业务层应用排序是最有效的


我之所以说高效,是因为不过滤数据库端的一些记录不会造成太大损失。如果数据库包含1000万条记录,而您返回的记录数量很大,那么这就不太正确了,因为我从您编写问题的方式中感觉到,您的团队可能会更乐于使用代码。

就速度而言,只要您使用的是编译后的查询,您的select性能就不会有太大的差异。有一次,他详细介绍了他们为使LINQ在SQL方面更快而做的所有工作。关键是,如果您使用的是编译后的select语句,那么您的运行速度实际上与存储过程一样快。如果您没有使用编译后的select,那么您应该阅读以了解如何进行选择。一个未编译的select查询的速度大约是普通SQL的一半,因此可能会有不错的收益

如果速度不是一个大问题,您指的是保持这个听起来复杂的数据库模式一致的组织任务,那么这是另外一件事。如果是这种情况,那么您可能希望从SQL级别开始,至少确保您拥有所有想要的匹配项。这很容易测试,SQL针对这种搜索进行了优化。当您可以从服务器获得或多或少的即时反馈时,您也会发现确认工作更容易,而不必编译和运行程序来测试场景

当你确定你拥有了你想要的一切,而没有你不想要的,你就可以用C语言来处理这个小得多的任务了,不管你有什么规则来对候选人进行优先级排序


编辑:哎呀,我没看到埃里克的答案和我的答案很相似。哦,好吧。

我很感谢你回答我的问题,尽管其他人认为我的问题没有建设性。TackOverflow之所以成功,是因为它有一个狭隘、具体的重点。你的问题很好,只是不符合这个重点。有一个同伴网站,你的问题可能是一个更好的适合我感谢你回答我的问题,即使它被标记为没有建设性的其他人