我似乎无法理解这个概念...我想允许用户将一些“过滤器”应用于数据集(最好是在查询字符串中,以便为过滤后的结果添加书签),使用Rob Conery的Massive动态数据访问“工具”。
我可以简单地编写一大堆if,然后根据我捕获的每个“规则”写一个直接查询......但这似乎打败了“动态sql”的目的。
在C#/ ASP.NET MVC中是否有一般的模式/最佳实践?
答案 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查询来做类似的事情,但它会容易出错并且需要大量的检查和平衡。