C# Asp/C.Net实体框架-基于条件创建扩展参数化查询

C# Asp/C.Net实体框架-基于条件创建扩展参数化查询,c#,asp.net,sql-server,entity-framework,ado.net,C#,Asp.net,Sql Server,Entity Framework,Ado.net,在ADO.Net中,我创建了一个DAL文件,该文件从用户获取参数,如果参数不为null,则根据if语句扩展查询。现在我想在实体框架中做同样的事情。 我搜索了很多网站,包括Stack Overflow,但没有得到满意的答案。 作为参考,下面的链接也帮不了我 所需的场景是 cmd.text = "SELECT FROM tbl_name WHERE id>0 " if(param_value != null) { cmd.text += " AND (param_name = '@p

在ADO.Net中,我创建了一个DAL文件,该文件从用户获取参数,如果参数不为null,则根据if语句扩展查询。现在我想在实体框架中做同样的事情。 我搜索了很多网站,包括Stack Overflow,但没有得到满意的答案。 作为参考,下面的链接也帮不了我

所需的场景是

cmd.text = "SELECT FROM tbl_name WHERE id>0 "

if(param_value != null)
{
    cmd.text += " AND (param_name = '@param_value')";
    if(!cmd.contains("param_name"))
          cmd.parameters.addwithvalue("param_name", @param_value);
    cmd.parameters["param_name"] = @param_value;
}

// proceed further with cmd.text
现在请忽略语法,我只是想表达我想做什么的概念

我想对实体框架应用相同的概念

两天前,我发现一个场景,其中的查询文本构建在一个aspx.cs文件中,并按原样传递给DAL中的自定义构建函数,该函数将文本传递给cmd.text,并以ADO.net样式处理其余的检索

这种方法有潜在的危险性,因为任何稍有知识的人都可能会破坏这种安全性。 我想创建一个具有参数及其值的查询,如上面代码块中所示。

使用LINQ to SQL:

var param_value = 0;
db.tbl_name.Where(x => x.id > 0).Where(x => x.some_property == param_value).ToString();
如果您查看生成的SQL,您会发现这是它的参数化名称,不过它会选择参数名称


我在末尾添加了ToString,这样您就可以看到结果SQL;基于OP,我想说的是,不要再这样做了,继续直接在LINQ中进一步修改查询,而不是将SQL转换为字符串并连接起来。

我刚刚发现使用实体框架与传统方法完全不同。在这里,我们处理模型/对象及其相互之间的关系,并基于这种关系访问它们。所以要回答这个问题,我们需要先得到这个模型

Movie movie = db.Movies.Find(id);
然后,我们得到了一个模型对象,它有不同的属性,比如title、IMDb、rating等。 我们使用where子句反复得到它们,如下所示:

db.Where(movies=>movies.IMDb==10).Where(movies=>movies.title=="The Game Plan")
这与经典方法中的以下内容相同

AND (IMDb = 10) AND (title = 'The Game Plan')
在此之后,您可以任意扩展他的查询。 再次忽略这里的语法,因为我在这里不能仅仅传达这个想法

为了便于参考,请记住我已经解释过的上下文,以下链接可能会有所帮助


这与经典ASP无关。那么请告诉我任何替代解决方案,以便我可以执行自定义选择。@GulabMehak请看一下这个:还有这个