iQueryable和表达式树

时间:2009-10-15 19:04:49

标签: c# lambda expression-trees iqueryable

有人可以通过提供一个非常基本的例子来解释我如何在C#中使用(1)iQueryable(2)表达式树吗?两者都不相关,而不是提出两个单独的问题,我希望在一个问题中清除我的怀疑。

高级谢谢。

3 个答案:

答案 0 :(得分:3)

Expression trees非常简单:

Expression<Func<int,int,int>> addExp = (a,b) => a + b;

var paramA = Expression.Parameter(typeof(int), "a");
var paramB = Expression.Parameter(typeof(int), "b");
Expression<Func<int,int,int>> addExp = Expression.Lambda<Func<int,int,int>>(
    Expression.Add(paramA, paramB),
    paramA,
    paramB);

构建IQueryable提供程序相当困难。但是,Matt Warren has a very indepth series that walks you through creating an IQueryable provider.

答案 1 :(得分:2)

我一般不喜欢只是链接东西,但这是一个更复杂的话题。我建议观看这个视频:

http://channel9.msdn.com/shows/Going+Deep/Erik-Meijer-and-Bart-De-Smet-LINQ-to-Anything/

Erik在解释这个方面做得非常出色,并为辛普森一家提供了一个简洁的Linq。

答案 2 :(得分:0)

Expression<Func<T, string, PropertyInfo>> expression = (obj, str) => 
    obj.GetType()
       .GetProperty(
           obj.GetType()
              .GetProperties()
              .ToList()
              .Find(prop =>
                    prop.Equals(str, StringComparison.OrdinalIgnoreCase).Name.ToString());
var obj = expression.Compile()(rowsData.FirstOrDefault(), sortIndex);