2013-02-19 41 views
0

到目前为止,我一直在使用传统的ADO.NET模型来访问数据库。我必须告诉你,我对此很满意。但我最近也听说过很多关于实体框架的内容,所以我想我可以试试看。其实推动我的主要原因是需要找到一种方法来构建我的存储过程的WHERE子句。与经典的方式,我必须做的以下任一:我可以使用实体框架来操纵存储过程的内存吗?

  1. 构建WHERE子句中的客户端根据用户输入,将其作为一个VARCHAR2参数的存储过程,拼接的WHERE clausewith主部分SQL并将整个字符串传递给EXECUTE_IMMEDIATE函数。我个人讨厌必须这样做。
  2. 在存储过程中构造了大量的SQL语句,这意味着我必须考虑可能组成WHERE子句的所有可能的组合。这似乎比第一种情况更糟糕。

我知道EF也可以使用Stored Procedures。但是,是否可以动态地构建WHERE部分? EF能以某种方式拯救我吗?

回答

1

是的,你可以在Linq中使用动态查询。

  1. Dynamic Query LIbrary

从斯科特谷的例子

var query = Northwind.Products.Where("Lastname LIKE "someValue%"); 

或一些复杂的查询

var query = 
    db.Customers. 
    Where("City = @0 and Orders.Count >= @1", "London", 10). 
    OrderBy("CompanyName"). 
    Select("new(CompanyName as Name, Phone)"); 

或者从这个答案Where clause dynamically.

var pr = PredicateBuilder.False<User>(); 
foreach (var name in names) 
{ 
    pr = pr.Or(x => x.Name == name && x.Username == name); 
} 
return query.AsExpandable().Where(pr); 
+0

但是,这只是动态地创建一个查询。我想使用存储过程。 – 2013-02-19 08:42:10

+0

@MikeJM尝试链接存储过程的方法。像这样的东西。 yourContext.yourSPname()。Where(here your query); //只是伪代码,不知道是否工作 – 2013-02-19 08:46:23