protected virtual DataMember AppendMemberByCoalesce(DataMember left, ExpressionType expType, DataMember right)
        {
            var dataMembers = DataMemberUtil.GetKeyMember(left, right);
            var memberKey   = ToParamMember(dataMembers.Item1);
            var memberValue = ToParamMember(dataMembers.Item2);

            AddParam(memberKey, memberValue);
            StringBuilder nameBuilder = new StringBuilder();

            nameBuilder.AppendFormat("ISNULL({0},{1})", memberKey.Name, memberValue.Name);
            return(new DataMember(nameBuilder.ToString(), null, DataMemberType.None));
        }
 /// <summary>
 /// 拼接左边和右边参数的方法
 /// </summary>
 /// <param name="left"></param>
 /// <param name="expType"></param>
 /// <param name="right"></param>
 /// <returns></returns>
 protected virtual DataMember AppendMember(DataMember left, ExpressionType expType, DataMember right)
 {
     if (left == null && right == null)
     {
         return(null);
     }
     if (expType == ExpressionType.Coalesce)
     {
         return(AppendMemberByCoalesce(left, expType, right));
     }
     else
     {
         var dataMembers = DataMemberUtil.GetKeyMember(left, right);
         var memberKey   = ToParamMember(dataMembers.Item1);
         var memberValue = ToParamMember(dataMembers.Item2);
         AddParam(memberKey, memberValue);
         StringBuilder nameBuilder = new StringBuilder();
         nameBuilder.AppendFormat("({0} {1} {2})", memberKey?.Name, ResolveExpressionType(expType), memberValue?.Name);
         return(new DataMember(nameBuilder.ToString(), null, DataMemberType.None));
     }
 }