Exemplo n.º 1
0
        public IUpdate <T1> Set <TMember>(Expression <Func <T1, TMember> > binaryExpression)
        {
            if (binaryExpression?.Body.NodeType == ExpressionType.Equal)
            {
                _set.Append(", ").Append(_commonExpression.ExpressionWhereLambdaNoneForeignObject(null, _table, null, binaryExpression, null));
                return(this);
            }
            if (binaryExpression?.Body is BinaryExpression == false &&
                binaryExpression?.Body.NodeType != ExpressionType.Call)
            {
                return(this);
            }
            var cols = new List <SelectColumnInfo>();
            var expt = _commonExpression.ExpressionWhereLambdaNoneForeignObject(null, _table, cols, binaryExpression, null);

            if (cols.Any() == false)
            {
                return(this);
            }
            foreach (var col in cols)
            {
                if (col.Column.Attribute.IsNullable == true && col.Column.Attribute.MapType.IsNullableType())
                {
                    var replval = _orm.CodeFirst.GetDbInfo(col.Column.Attribute.MapType.GenericTypeArguments.FirstOrDefault())?.defaultValue;
                    if (replval == null)
                    {
                        continue;
                    }
                    var replname = _commonUtils.QuoteSqlName(col.Column.Attribute.Name);
                    expt = expt.Replace(replname, _commonUtils.IsNull(replname, _commonUtils.FormatSql("{0}", replval)));
                }
            }
            _setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(cols.First().Column.Attribute.Name)).Append(" = ").Append(expt);
            return(this);
        }
Exemplo n.º 2
0
 public IDelete <T1> WhereIf(bool condition, Expression <Func <T1, bool> > exp)
 {
     if (condition == false || exp == null)
     {
         return(this);
     }
     return(this.Where(_commonExpression.ExpressionWhereLambdaNoneForeignObject(null, _table, null, exp?.Body, null, _params)));
 }
Exemplo n.º 3
0
 public IDelete <T1> Where(Expression <Func <T1, bool> > exp) => this.Where(_commonExpression.ExpressionWhereLambdaNoneForeignObject(null, null, exp?.Body, null));
Exemplo n.º 4
0
        public IUpdate <T1> Set <TMember>(Expression <Func <T1, TMember> > exp)
        {
            var body     = exp?.Body;
            var nodeType = body?.NodeType;

            switch (nodeType)
            {
            case ExpressionType.Equal:
                _set.Append(", ").Append(_commonExpression.ExpressionWhereLambdaNoneForeignObject(null, _table, null, exp, null));
                return(this);

            case ExpressionType.MemberInit:
                var initExp = body as MemberInitExpression;
                if (initExp.Bindings?.Count > 0)
                {
                    for (var a = 0; a < initExp.Bindings.Count; a++)
                    {
                        var initAssignExp = (initExp.Bindings[a] as MemberAssignment);
                        if (initAssignExp == null)
                        {
                            continue;
                        }
                        var memberName = initExp.Bindings[a].Member.Name;
                        if (_table.ColumnsByCsIgnore.ContainsKey(memberName))
                        {
                            continue;
                        }
                        if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false)
                        {
                            throw new Exception($"找不到属性:{memberName}");
                        }
                        var memberValue = _commonExpression.ExpressionLambdaToSql(initAssignExp.Expression, new CommonExpression.ExpTSC {
                            isQuoteName = true
                        });
                        _setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(memberValue);
                    }
                }
                return(this);

            case ExpressionType.New:
                var newExp = body as NewExpression;
                if (newExp.Members?.Count > 0)
                {
                    for (var a = 0; a < newExp.Members.Count; a++)
                    {
                        var memberName = newExp.Members[a].Name;
                        if (_table.ColumnsByCsIgnore.ContainsKey(memberName))
                        {
                            continue;
                        }
                        if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false)
                        {
                            throw new Exception($"找不到属性:{memberName}");
                        }
                        var memberValue = _commonExpression.ExpressionLambdaToSql(newExp.Arguments[a], new CommonExpression.ExpTSC {
                            isQuoteName = true
                        });
                        _setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(memberValue);
                    }
                }
                return(this);
            }
            if (body is BinaryExpression == false &&
                nodeType != ExpressionType.Call)
            {
                return(this);
            }
            var cols = new List <SelectColumnInfo>();
            var expt = _commonExpression.ExpressionWhereLambdaNoneForeignObject(null, _table, cols, exp, null);

            if (cols.Any() == false)
            {
                return(this);
            }
            foreach (var col in cols)
            {
                if (col.Column.Attribute.IsNullable == true && col.Column.Attribute.MapType.IsNullableType())
                {
                    var replval = _orm.CodeFirst.GetDbInfo(col.Column.Attribute.MapType.GenericTypeArguments.FirstOrDefault())?.defaultValue;
                    if (replval == null)
                    {
                        continue;
                    }
                    var replname = _commonUtils.QuoteSqlName(col.Column.Attribute.Name);
                    expt = expt.Replace(replname, _commonUtils.IsNull(replname, _commonUtils.FormatSql("{0}", replval)));
                }
            }
            _setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(cols.First().Column.Attribute.Name)).Append(" = ").Append(expt);
            return(this);
        }