0

到目前为止,我一直在使用经典的 ADO.NET 模型进行数据库访问。我必须告诉你,我对此很满意。但我最近也听到了很多关于 Entity Framework 的消息,所以我想我可以试一试。实际上推动我的主要原因是需要找到一种方法来构建我的存储过程的 WHERE 子句。使用经典方式,我必须执行以下任一操作:

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

我知道 EF 也使得使用存储过程成为可能。但是可以动态构建 WHERE 部分吗?EF能以某种方式拯救我吗?

4

1 回答 1

1

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

  1. 动态查询库

来自 scott gu 的例子

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 子句动态。

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);
于 2013-02-19T08:37:10.700 回答