使用Entity Framework实现高级搜索的最佳实践是什么?

时间:2013-10-24 20:22:19

标签: c# entity-framework search

我使用两种不同的方法来实现高级搜索,其中每种方法都有其优点和缺点。

用户可以使用3个参数(姓名,姓氏和移动设备)执行高级搜索。

我尝试的第一种方法是检查用户提供了哪些参数;这要求我做8 if& else检查(2 ^个参数)并在每个条件中我写一个单独的查询,该查询接受相应的参数,例如,如果用户输入了名称&系列名称查询的where子句如下所示:

where(x=>x.name.contains(name) && x.familyname.contains(familyname))

或者在另一种情况下,如果用户只输入了移动设备,则查询的where子句将如下所示:

where(x=>x.mobile==mobile)

这种方式的优点是我一次点击了数据库,但缺点是我必须编写更多的代码。

我尝试的第二种方式是我声明了一个IQueryable<>对象并且我首先将数据提供给It,然后我逐个检查搜索参数,如果其中任何一个有值,我会过滤{ {1}}使用该值,最后我执行IQueryable。这种方式的优点是代码少得多,但两次访问数据库是一个问题。

以下是第二种方式的代码示例:

.ToList()

我想知道是否有更好的方法或最佳做法来使用entityframework执行高级搜索?

1 个答案:

答案 0 :(得分:7)

您使用第二个解决方案 多次多次访问数据库。请记住,IQueryable对象是一个查询本身,而不是查询的结果。延迟执行直到实际迭代查询。根据各种Where检查有条件地附加多个if子句正在更改查询本身,而不是处理查询结果(因为在该时间点没有结果)。

您可以在数据库上使用分析器来验证是否只执行了一个查询,并且一个查询包含该分析中的所有过滤。

这是一种相当普遍的模式;我已在许多实例中使用它来制作自定义搜索页面。