你如何在ASP.NET MVC中使用查询字符串值编写“动态sql”过滤器?

时间:2011-06-06 13:38:52

标签: sql dynamic asp.net-mvc

我似乎无法理解这个概念...我想允许用户将一些“过滤器”应用于数据集(最好是在查询字符串中,以便为过滤后的结果添加书签),使用Rob Conery的Massive动态数据访问“工具”。

我可以简单地编写一大堆if,然后根据我捕获的每个“规则”写一个直接查询......但这似乎打败了“动态sql”的目的。

在C#/ ASP.NET MVC中是否有一般的模式/最佳实践?

1 个答案:

答案 0 :(得分:1)

我认为这个概念有点宽泛,可以说有一种模式/最佳实践来做这样的事情。也就是说,我认为使用像LINQ to SQL或Entity Framework这样的东西会成为一个很好的动态查询引擎,因为你可以做这样的事情:

var query = DBContext.Items.Select(x => x.Name);

switch(QueryString["Type"])
{
    case "Dog":
        query = query.Where(x => x.Type == "Dog";
        break;
    case "Cat":
        query = query.Where(x => x.Type == "Cat";
    etc....
}

query = query.Where(x => x.Owner.Name == QueryString["Owner"]);

ResultsDataGrid.Datasource = query;

显然有一些伪代码,但在这种情况下LINQ to SQL的优点是延迟执行。 query在数据绑定之前不会运行,并包含您动态添加的任何过滤器。它还为您提供了类型安全性,并将阻止SQL注入。你可以通过实际构建最终将运行的SQL查询来做类似的事情,但它会容易出错并且需要大量的检查和平衡。