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 积分,解读结果公开显示在下面。

还没有人解读过这个文件。