BLL/extention/ExpressionVisitor.cs
(开头部分) 13KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
namespace BLL.extention
{
public static class ExpressionExtensions
{
public static Expression Visit<T>(
this Expression exp,
Func<T, Expression> visitor ) where T : Expression
{
return ExpressionVisitor<T>.Visit( exp, visitor );
}
public static TExp Visit<T, TExp>(
this TExp exp,
Func<T, Expression> visitor )
where T : Expression
where TExp : Expression
{
return (TExp)ExpressionVisitor<T>.Visit( exp, visitor );
}
public static Expression<TDelegate> Visit<T, TDelegate>(
this Expression<TDelegate> exp,
Func<T, Expression> visitor ) where T : Expression
{
return ExpressionVisitor<T>.Visit<TDelegate>( exp, visitor );
}
public static IQueryable<TSource> Visit<T, TSource>(
this IQueryable<TSource> source,
Func<T, Expression> visitor ) where T : Expression
{
return source.Provider.CreateQuery<TSource>( ExpressionVisitor<T>.Visit( source.Expression, visitor ) );
}
}
/// <summary>
/// This class visits every Parameter expression in an expression tree and calls a delegate
/// to optionally replace the parameter. This is useful where two expression trees need to
/// be merged (and they don't share the same ParameterExpressions).
/// </summary>
public class ExpressionVisitor<T> : ExpressionVisitor where T : Expression
{
Func<T, Expression> visitor;
public ExpressionVisitor( Func<T, Expression> visitor )
{
this.visitor = visitor;
}
public static Expression Visit(
Expression exp,
Func<T, Expression> visitor )
{
后面还有 381 行代码,购买后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
