日期:2014-05-20  浏览次数:21064 次

UnaryExpression和Expression.Quote
本帖最后由 z1101385391 于 2013-07-13 21:51:26 编辑

public static IQueryable<TSource> Count<TSource,TKey>(this IQueryable<TSource> source
, Expression<Func<TSource,TKey>> keySelector)
        {
            return source.Provider.CreateQuery<TSource>(Expression.Call(null
,((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(new Type[] { typeof(TSource)
, typeof(TKey) })
, new Expression[] { source.Expression, keySelector }));
        }


public static IQueryable<TSource> Count<TSource,TKey>(this IQueryable<TSource> source
, Expression<Func<TSource,TKey>> keySelector)
        {
            return source.Provider.CreateQuery<TSource>(Expression.Call(null
, ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(new Type[] { typeof(TSource)
, typeof(TKey) })
, new Expression[] { source.Expression, Expression.Quote(keySelector) }));
        }


上面是对Linq的一些扩展,加了个Count函数,上面两段代码都可以成功运行
区别只在于一个是keySelector,一个是Expression.Quote(keySelector),Expression.Quote返回的是UnaryExpression。下面这个是抄的微软的源码,修改了一些关键的地方,大部分没变
我的问题是,既然这两个都可以运行而且没问题,那为什么要加Expression.Quote?直接keySelector不是也可以吗?

------解决方案--------------------
就你这个例子,没有什么区别。