C# 动态CDATA项目中的IQueryable
我正在处理动态数据项目,并尝试在IQueryable对象上执行查询。 我想执行一个查询,检查我的实体的“SubjectID”字段中是否包含文本 这是我的过滤器类:C# 动态CDATA项目中的IQueryable,c#,linq,dynamic-data,C#,Linq,Dynamic Data,我正在处理动态数据项目,并尝试在IQueryable对象上执行查询。 我想执行一个查询,检查我的实体的“SubjectID”字段中是否包含文本 这是我的过滤器类: public partial class SubjectIDFilter : System.Web.DynamicData.QueryableFilterUserControl { protected void Page_Init(object sender, EventArgs e) {
public partial class SubjectIDFilter : System.Web.DynamicData.QueryableFilterUserControl
{
protected void Page_Init(object sender, EventArgs e)
{
}
public override System.Linq.IQueryable GetQueryable(System.Linq.IQueryable source)
{
if (string.IsNullOrEmpty(this.textBox.Text))
{
return source;
}
return source;
}
protected void btnSearch_Click(Object sender,
EventArgs e)
{
OnFilterChanged();
}
public override Control FilterControl
{
get
{
return this.textBox;
}
}
}
代码应该放在“GetQueryable”方法中
我曾尝试编写“source.Where…”,但IDE intellisence无法识别源对象上的那些LINQ方法(“Select,Where…”)。
我不知道如何使用“Expression”对象(对于CreateQuery方法)编写查询
如何对该对象执行简单的SQL查询?您应该创建表达式并使用返回它。下面是执行所需操作的代码:
public override IQueryable GetQueryable(IQueryable source)
{
if (string.IsNullOrEmpty(textBox.Text))
{
return source;
}
string filterValue = textBox.Text;
ConstantExpression value = Expression.Constant(filterValue);
ParameterExpression parameter = Expression.Parameter(source.ElementType);
MemberExpression property = Expression.Property(parameter, Column.Name);
if (Nullable.GetUnderlyingType(property.Type) != null)
{
property = Expression.Property(property, "Value");
}
Expression comparison = Expression.Call(property, typeof(string).GetMethod("Contains", new [] { typeof(string) }), value);
LambdaExpression lambda = Expression.Lambda(comparison, parameter);
MethodCallExpression where = Expression.Call(
typeof(Queryable),
"Where",
new[] { source.ElementType },
source.Expression,
lambda);
return source.Provider.CreateQuery(where);
}
此代码取自Oleg的Sych博客文章。它很好地洞察了动态数据过滤机制的作用,我强烈推荐您阅读