示例#1
0
 /// <summary>
 /// 创建二元操作表达式。
 /// </summary>
 /// <param name="kind">二元操作种类。</param>
 /// <param name="left">左端表达式。</param>
 /// <param name="right">右端表达式。</param>
 /// <param name="type">两端操作数据类型。</param>
 public DbBinaryExpression(EBinaryKind kind, DbExpression left, DbExpression right, Type type)
 {
     Kind    = kind;
     Left    = left;
     Right   = right;
     ClrType = type;
 }
示例#2
0
 /// <summary>
 /// 初始化二元逻辑运算。
 /// </summary>
 /// <param name="context">生成上下文。生成上下文。</param>
 /// <param name="kind">逻辑运算种类。</param>
 public BinaryLogicalFragment(GenerateContext context, EBinaryKind kind)
     : base(context)
 {
     if (kind == EBinaryKind.AndAlso || kind == EBinaryKind.OrElse)
     {
         Kind = kind;
     }
     else
     {
         throw new ArgumentException(Res.ExceptionBinaryLogicalKind, nameof(kind));
     }
 }
示例#3
0
        /// <summary>
        /// 向指定的表达式语句片段合并多个<see cref="IExpressionFragment"/>片段。
        /// </summary>
        /// <param name="target">目标语句片段</param>
        /// <param name="kind">逻辑操作符种类。</param>
        /// <param name="fragments">合并的语句片段集合。</param>
        /// <returns>合并结果。</returns>
        public static ILogicFragment Merge(this IExpressionFragment target, EBinaryKind kind, IEnumerable <IExpressionFragment> fragments)
        {
            var current = target as BinaryLogicalFragment;

            if (!fragments.Any())
            {
                throw new ArgumentException(Res.ExceptionMergeFragmentIsNotEmpty, nameof(fragments));
            }
            foreach (var fragment in fragments)
            {
                if (current == null)
                {
                    if (fragment is BinaryLogicalFragment binary && binary.Kind == kind)
                    {
                        current = binary;
                        current.Expressions.Insert(0, target);
                    }
                    else
                    {
                        current = new BinaryLogicalFragment(target.Context, kind);
                        current.Expressions.Add(target);
                        current.Expressions.Add(fragment);
                    }
                }
示例#4
0
 /// <summary>
 /// 初始化二元运算。
 /// </summary>
 /// <param name="context">生成上下文。</param>
 /// <param name="kind">二元运算种类。</param>
 public BinaryFragment(GenerateContext context, EBinaryKind kind)
     : base(context)
 {
     Kind = kind;
 }
示例#5
0
        /// <summary>
        /// 合并多个<see cref="IExpressionFragment"/>片段为一个逻辑判断语句片段。
        /// </summary>
        /// <param name="fragments">合并的语句片段集合。</param>
        /// <param name="kind">逻辑操作符种类。</param>
        /// <returns>合并结果。</returns>
        public static ILogicFragment Merge(this IEnumerable <IExpressionFragment> fragments, EBinaryKind kind = EBinaryKind.AndAlso)
        {
            var array = fragments.ToArray();

            if (array.Length == 1)
            {
                return(array[0] as ILogicFragment);
            }
            var other = new IExpressionFragment[array.Length - 1];

            Array.Copy(array, 1, other, 0, other.Length);
            return(Merge(array[0], kind, other));
        }
示例#6
0
 /// <summary>
 /// 合并多个<see cref="BinaryFragment"/>片段为一个逻辑判断语句片段。
 /// </summary>
 /// <param name="fragments">合并的语句片段集合。</param>
 /// <param name="kind">逻辑操作符种类。</param>
 /// <returns>合并结果。</returns>
 public static ILogicFragment Merge(this IEnumerable <BinaryFragment> fragments, EBinaryKind kind = EBinaryKind.AndAlso) => Merge(fragments, kind);