C# 在LINQ中创建表达式

C# 在LINQ中创建表达式,c#,linq,C#,Linq,我的LINQ查询类似于下面的代码 var data2 = data.Where(c => String.Format("{0:MM/dd/yyyy}", c.OrderDate) == "07/04/1996"); pred =Expression.Equal(membertype, Expression.Constant(value, type)); lambda = Expression.Lambda(predicate, paramExpression); source.Wher

我的LINQ查询类似于下面的代码

 var data2 = data.Where(c => String.Format("{0:MM/dd/yyyy}", c.OrderDate) == "07/04/1996");
pred =Expression.Equal(membertype, Expression.Constant(value, type));
lambda = Expression.Lambda(predicate, paramExpression);
source.Where(paramExpression, predicate);
我需要自定义下面表达式中格式化列的谓词。我需要为谓词编写表达式,并根据格式过滤数据。请检查下面的代码

 var data2 = data.Where(c => String.Format("{0:MM/dd/yyyy}", c.OrderDate) == "07/04/1996");
pred =Expression.Equal(membertype, Expression.Constant(value, type));
lambda = Expression.Lambda(predicate, paramExpression);
source.Where(paramExpression, predicate);

谢谢。

这是一个动态创建
.Where
的示例

static void DynamicWhereBuilder() {
  var datas = new Data[] {
    new Data { OrderDate  = "07/04/1996"},
    new Data { OrderDate  = "07/04/1990"},
    new Data { OrderDate  = "07/04/2001"},
    new Data { OrderDate  = "2012/04/07"}
  };
  IQueryable<Data> queryableData = datas.AsQueryable<Data>();

  var formatConstant = Expression.Constant("{0:MM/dd/yyyy}", typeof(string));
  var parameter = Expression.Parameter(typeof(Data), "dataArg");
  var property = Expression.Property(parameter, "OrderDate");

  var left = Expression.Call(property, typeof(string).GetMethod("Format", new Type[] { typeof(string), typeof(object) }), formatConstant, property);
  var right = Expression.Constant("07/04/2001", typeof(string));

  var equal = Expression.Equal(left, right);
  var whereCallExpression = Expression.Call(
    typeof(Queryable),
    "Where",
    new Type[] { queryableData.ElementType },
    queryableData.Expression,
    Expression.Lambda<Func<Data, bool>>(equal, new ParameterExpression[] { parameter }));
  var results = queryableData.Provider.CreateQuery<Data>(whereCallExpression); // returns the object with OrderDate = "07/04/2001"
}
static void DynamicWhereBuilder(){
var数据=新数据[]{
新数据{OrderDate=“07/04/1996”},
新数据{OrderDate=“07/04/1990”},
新数据{OrderDate=“07/04/2001”},
新数据{OrderDate=“2012/04/07”}
};
IQueryable queryableData=datas.AsQueryable();
var formatConstant=Expression.Constant(“{0:MM/dd/yyyy}”),typeof(string));
var参数=表达式参数(typeof(Data),“dataArg”);
var property=Expression.property(参数“OrderDate”);
var left=Expression.Call(属性,typeof(string).GetMethod(“格式”,新类型[]{typeof(string),typeof(object)}),formatConstant,属性);
var right=表达式常数(“07/04/2001”,类型(字符串));
var equal=表达式.equal(左、右);
var whereCallExpression=Expression.Call(
类型(可查询),
“哪里”,
新类型[]{queryableData.ElementType},
queryableData.Expression,
Lambda(相等,新参数表达式[]{parameter});
var results=queryableData.Provider.CreateQuery(whereCallExpression);//返回OrderDate=“07/04/2001”的对象
}

为什么需要将其转换?它不起作用吗?此外,它已经是一个lambda表达式…这已经是一个lambda表达式。我已经将查询修改为可理解的查询。我无法运行您的代码,如果这样做,将引发以下异常静态方法需要null实例,非静态方法需要非null实例。参数名称:instanceCan如果您不提供详细信息,则不希望人们帮助您。您是如何运行代码的?异常具体发生在哪里?