Asp / C# .Net Entity Framework - 根据条件创建扩展参数化查询
Asp / C# .Net Entity Framework - Create Extended Parameterized Query based on Conditions
在 ADO.Net 中,我创建了一个 DAL 文件,该文件从用户那里获取参数,如果它们不为空,则根据 if 语句扩展查询。现在我想在 Entity Framework 中做同样的事情。
我搜索了很多网站,包括 Stack Overflow,但没有得到满意的答案。
供参考,以下link也帮不了我
Select Query with Where condition depending on list values in asp.net
需要的场景是
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
请忽略现在的语法,我只是想传达我想做的事情的概念。
我想对 Entity Framework
应用相同的概念
好吧,两天前我发现了一个场景,其中查询(文本)是在 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,您会看到它已参数化(不过它选择了 param_name
)。
我在末尾添加了 ToString()
,这样您就可以看到结果 SQL;基于 OP,我会说将其关闭,并继续直接在 LINQ 中进一步修改查询,而不是将 SQL 转换为字符串并连接。
我刚刚发现使用 Entity framework 是一个与经典方法完全不同的世界。在这里,我们使用 models/objects 及其彼此之间的关系,并根据这种关系访问它们。所以要回答这个问题,我们需要先得到那个模型,比如
Movie movie = db.Movies.Find(id);
然后,我们得到一个模型 object,它确实具有不同的属性,如标题、IMDb、评级等。
我们使用 where 子句重复获取它们,如下所示:
db.Where(movies=>movies.IMDb==10).Where(movies=>movies.title=="The Game Plan")
这一切都等于经典方法中的以下内容
AND (IMDb = 10) AND (title = 'The Game Plan')
之后,可以随心所欲地扩展他的查询。
再次忽略这里的语法,因为我在这里只是传达这个想法。
作为参考,以下链接可能有助于记住我所解释的上下文。
在 ADO.Net 中,我创建了一个 DAL 文件,该文件从用户那里获取参数,如果它们不为空,则根据 if 语句扩展查询。现在我想在 Entity Framework 中做同样的事情。 我搜索了很多网站,包括 Stack Overflow,但没有得到满意的答案。 供参考,以下link也帮不了我
Select Query with Where condition depending on list values in asp.net
需要的场景是
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
请忽略现在的语法,我只是想传达我想做的事情的概念。
我想对 Entity Framework
应用相同的概念好吧,两天前我发现了一个场景,其中查询(文本)是在 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,您会看到它已参数化(不过它选择了 param_name
)。
我在末尾添加了 ToString()
,这样您就可以看到结果 SQL;基于 OP,我会说将其关闭,并继续直接在 LINQ 中进一步修改查询,而不是将 SQL 转换为字符串并连接。
我刚刚发现使用 Entity framework 是一个与经典方法完全不同的世界。在这里,我们使用 models/objects 及其彼此之间的关系,并根据这种关系访问它们。所以要回答这个问题,我们需要先得到那个模型,比如
Movie movie = db.Movies.Find(id);
然后,我们得到一个模型 object,它确实具有不同的属性,如标题、IMDb、评级等。 我们使用 where 子句重复获取它们,如下所示:
db.Where(movies=>movies.IMDb==10).Where(movies=>movies.title=="The Game Plan")
这一切都等于经典方法中的以下内容
AND (IMDb = 10) AND (title = 'The Game Plan')
之后,可以随心所欲地扩展他的查询。 再次忽略这里的语法,因为我在这里只是传达这个想法。
作为参考,以下链接可能有助于记住我所解释的上下文。