我想在我的项目中创建一个简单的报表生成器(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
难以执行。
我怀疑使用什么方法。
如果有人能够解释在我的项目中使用哪种方法会更有帮助。
答案 0 :(得分:0)
出于某些重要原因,我建议您强烈使用LINQ Query
。
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;表达。您可以按照相同的过程进行大于,小于和创建自己的表达式树助手。