2012-07-12 31 views
-8

我的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.Where(paramExpression, predicate); 

谢谢。

+4

为什么这个** **需要被转换:如果是这样,可以在使用PredicateBuilder更简单的方式来完成?它不起作用吗?此外,它已经是一个lambda表达式... – 2012-07-12 08:44:02

+0

这已经是一个lambda表达式。通过[this](http://www.codeproject.com/Articles/33769/Basics-of-LINQ-Lamda-Expressions) – R76 2012-07-12 08:49:39

+0

我已经修改了查询来理解。 – 2012-07-12 09:04:56

回答

0

下面是一个示例,它动态创建.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" 

     } 
+0

我无法运行你的代码,如果这样做抛出下面的异常 静态方法需要空实例,非静态方法需要非空实例。 参数名称:实例 – 2012-07-12 13:24:14

+3

如果不提供详细信息,不能指望人们帮助您。你如何运行代码以及发生异常的地方? – Alex 2012-07-12 13:51:31