2009-08-25 128 views
1

我正在实现一个使用实体框架的应用程序的搜索功能。有几个可选字段用于搜索特定的数据库表/视图。用EF实现这种搜索的最佳方式是什么?存储过程?或者只能使用Linq来完成(现实)?实体框架 - 动态sql

回答

2

你应该可以很容易地在LINQ中做到这一点。永远记住,LINQ查询是可链接的:

var query = (from p in products 
      select p); 

if(field1 != null) 
{ 
    query = (from p in query 
      where p.Field1 = field1 
      select p); 
} 

if(field2 != null) 
{ 
    query = (from p in query 
      where p.Field2 = field2 
      select p); 
} 

foreach(Product p in query) 
{ 
    // ... 
} 
+0

会的“查询”事业的原始定义要执行“从产品的选择*”? – Jeremy 2009-08-25 17:57:32

+0

在最后一个可能的时刻之前,不会枚举LINQ查询(即不从数据库中检索结果)。这些调用只是建立起来的,然后当你需要访问结果中的特定元素(或计数等)时,从DB中检索整个组装的查询。 – kevingessner 2009-08-25 18:02:43

0

你可以看看this article关于动态生成lambda表达式对象来做到这一点。

3

处理可选的搜索参数,一个常见的模式是做这样的事情:

string p = null; 
var q = from o in dataContext.Products 
    where ((o.Name == p) || (p == null)) 
    select o;