/// <summary>
/// Creates an expression that defines a logical AND function
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="left"></param>
/// <param name="right"></param>
/// <returns></returns>
public static Expression <Func <T, bool> > And <T>(this Expression <Func <T, bool> > left, Expression <Func <T, bool> > right)
{
var invokedExpr = XPR.Invoke(right, left.Parameters.Cast <XPR>());
return(XPR.Lambda <Func <T, bool> >
(XPR.AndAlso(left.Body, invokedExpr), left.Parameters));
}