/// <summary>
        /// Construct equality expressions for source according to list of properties.
        /// </summary>
        /// <exception cref="ArgumentNullException">
        /// When parameterExp or source or properties is null.
        /// </exception>
        /// <typeparam name="TSource">Type of source.</typeparam>
        /// <param name="parameterExp">Parameter expression.</param>
        /// <param name="source">Source to construct expression on.</param>
        /// <param name="properties">List of properties.</param>
        /// <returns>List of equality expressions.</returns>
        public static IEnumerable <Expression> ConstructEqualityExpressions <TSource>(
            this ParameterExpression parameterExp,
            TSource source,
            IEnumerable <PropertyInfo> properties)
            where TSource : class
        {
            if (parameterExp == null)
            {
                throw new ArgumentNullException("parameterExp");
            }
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if (properties == null)
            {
                throw new ArgumentNullException("properties");
            }

            foreach (PropertyInfo property in properties)
            {
                yield return(parameterExp.ConstructEqualityExpression(
                                 source,
                                 property));
            }
        }