Asp.net 我可以使用实体框架操纵存储过程的内部结构吗
到目前为止,我一直在使用经典的ADO.NET模型进行数据库访问。我得告诉你,我对它很满意。但我最近也听说了很多关于实体框架的事情,所以我想我可以试试。实际上,促使我这么做的主要原因是需要找到一种方法来构建存储过程的WHERE子句。使用经典方法,我必须执行以下任一操作:Asp.net 我可以使用实体框架操纵存储过程的内部结构吗,asp.net,entity-framework,Asp.net,Entity Framework,到目前为止,我一直在使用经典的ADO.NET模型进行数据库访问。我得告诉你,我对它很满意。但我最近也听说了很多关于实体框架的事情,所以我想我可以试试。实际上,促使我这么做的主要原因是需要找到一种方法来构建存储过程的WHERE子句。使用经典方法,我必须执行以下任一操作: 基于用户输入在客户端构建WHERE子句,并将其作为VARCHAR2参数发送到存储过程,将WHERE子句与SQL的主要部分连接起来,并将整个字符串传递给EXECUTE_IMMEDIATE函数。我个人不喜欢这样做 在存储过程内部构造大
我知道EF也使使用存储过程成为可能。但是,是否有可能动态构建WHERE部分?EF能拯救我吗?是的,你可以在Linq中使用动态查询 以司各特·顾为例
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)");
或者从这个答案
var pr=PredicateBuilder.False();
foreach(名称中的变量名称)
{
pr=pr.Or(x=>x.Name==Name&&x.Username==Name);
}
返回query.AsExpandable().Where(pr);
但这只是动态创建查询。我想使用存储过程。@MikeJM尝试为存储过程链接where方法。像这样的。yourContext.yourSPname().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);