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')

之后,可以随心所欲地扩展他的查询。 再次忽略这里的语法,因为我在这里只是传达这个想法。

作为参考,以下链接可能有助于记住我所解释的上下文。

Multiple where conditions in EF - Whosebug