在报告生成器中使用动态linq或sql查询

时间:2017-08-30 09:08:33

标签: c# sql asp.net linq report

我想在我的项目中创建一个简单的报表生成器(ASP.Net,C#)。我需要低于期货,我可以通过 linq查询查询来实现这些:

  

最终用户(没有编程信息的用户)选择   来自Dropdown的实体名称。

linq查询

dbContext.dbSet

Sql查询

SELECT * FROM selectedTable
  

最终用户从checklistbox选择实体字段(这些字段   用于绑定到GridView)。为每个人创建TextBoxes。   最终用户稍后输入过滤网格的值。

linq查询

使用所选字段创建自定义where clause customExpression,并在以下查询中使用它。

dbContext.dbSet.Where(customExpression).ToList()

Sql查询

SELECT * FROM selectedTable
WHERE CustomWhereCondition

我在之前的项目中使用了 Sql查询,但我倾向于在新项目中使用 linq查询dynamic Where conditions可能会在将来开发出来,可能是我linq query无法执行,或者Sql query难以执行。 我怀疑使用什么方法。

如果有人能够解释在我的项目中使用哪种方法会更有帮助。

2 个答案:

答案 0 :(得分:0)

出于某些重要原因,我建议您强烈使用LINQ Query

  • 可扩展性和灵活性。
  • 安全性:避免SQL注入。
  • 如果表格或其列的名称发生变化,它将反映在您不需要在LINQ Query中更改它的视图中,而不像字符串SQL Query

答案 1 :(得分:0)

您可以使用谓词来解决它。

public static Func<T, bool> GetWhereLambda<T>(string paramName, dynamic paramValue)
    {            
        var param = Expression.Parameter(typeof(T), "s");
        var classExpr = GetEqualsExpr(param, paramName, paramValue);
        return Expression.Lambda<Func<T, bool>>(classExpr, param).Compile();
    }

    private static Expression GetEqualsExpr(ParameterExpression param,
                             string property,
                             dynamic value)
    {
        Expression prop = Expression.Property(param, property);
        Expression val = Expression.Constant(value, prop.Type);
        return Expression.Equal(prop, val);
    }

用法:

   Func<T, bool> myLambda = GetWhereLambda<T>(paramName, paramValue);
   var resultset = dbContext.dbSet.Where(myLambda).ToList();

此代码示例仅对动态&#39;其中param等于值&#39;表达。您可以按照相同的过程进行大于,小于和创建自己的表达式树助手。